首页 > 解决方案 > 如果文件是指向相对路径的符号链接并且链接的名称与文件不同,则使用 rmarkdown::render 进行编译不起作用

问题描述

我在从符号链接编译文件时遇到错误。

testLink.Rmd在父目录中有一个文件。我进入一个子目录并创建一个符号链接:

ln -s ../testLink.Rmd testLink.Rmd
ls -l testLink.Rmd
lrwxr-xr-x  1 epurdom  staff  15 Apr  8 09:52 testLink.Rmd -> ../testLink.Rmd

我可以很好地编译这个链接:

Rscript -e "rmarkdown::render('testLink.Rmd')"

但是,如果我创建相同的符号链接,但名称不同,我就会遇到问题。

ln -s ../testLink.Rmd testLink1.Rmd
ls -l testLink1.Rmd
lrwxr-xr-x  1 epurdom  staff  15 Apr  8 09:51 testLink1.Rmd -> ../testLink.Rmd
Rscript -e "rmarkdown::render('testLink1.Rmd')"
Error in readLines(con, warn = FALSE) : cannot open the connection
Calls: <Anonymous> -> read_utf8 -> readLines
In addition: Warning message:
In readLines(con, warn = FALSE) :
  cannot open file 'testLink1.Rmd': No such file or directory
Execution halted

我已经检查过,normalizePath似乎没有问题,并为两个链接指向同一个绝对文件:

Rscript -e "normalizePath('testLink.Rmd')"
[1] "/Users/epurdom/Documents/Research/EPICON/epiconWorkRepos/mRNASeq/scripts/testLink.Rmd"
Rscript -e "normalizePath('testLink1.Rmd')"
[1] "/Users/epurdom/Documents/Research/EPICON/epiconWorkRepos/mRNASeq/scripts/testLink.Rmd"

交互式运行我只看到:

> traceback()
3: readLines(con, warn = FALSE)
2: read_utf8(knit_input)
1: rmarkdown::render("testLink1.Rmd")

但是,readLines阅读链接并没有天真的问题:

> readLines('testLink1.Rmd')
[1] "---"                            "title: \"test symbolic links\""
[3] "output: html_document"          "---"                           
[5] ""                               "```{r}"                        
[7] "plot(rnorm(100))"               "```"                           
[9] ""

render所以我猜这似乎是内部发生的事情。

但是,如果符号链接与文件位于同一目录中,我没有问题。IE

cd ..
ln -s testLink.Rmd testLink1.Rmd
ls -l testLink1.Rmd
lrwxr-xr-x  1 epurdom  staff  12 Apr  8 10:26 testLink1.Rmd -> testLink.Rmd
Rscript -e "rmarkdown::render('testLink1.Rmd')"

这工作正常。似乎与具有不同名称的符号链接指向相对路径的组合有关。

这似乎不是我可以解决的问题(似乎是一个错误?),但如果有人看到任何想法,我会很感激任何想法。现在我不得不在多个位置重新复制文件,因为我需要不同的名称(这是更大管道的一部分,make 命令根据文件名触发不同的一系列操作)

标签: r-markdown

解决方案


推荐阅读