r-markdown - 如果文件是指向相对路径的符号链接并且链接的名称与文件不同,则使用 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 命令根据文件名触发不同的一系列操作)
解决方案
推荐阅读
- python - 如何在 Tkinter 中使同一列上的两个小部件具有不同的宽度?
- validation - 我们如何解释下面的验证损失?
- node.js - Only allow Cloud Functions to be called in my app code
- reactjs - 如何在ant-design中只展开一个折叠面板
- c++ - Rapidjson 返回错误数据
- ssas - MDX:如何使用硬编码值创建带有查询的 2x2 数组
- php - 对 PHP 页面的更改未出现在浏览器中
- flutter - Flutter - enabledBorder和Border有什么区别
- python - python - 使用空格分隔符将字符串转换为int
- azure - Azure Spot 实例 | gpu-集群