在所有其他情况下,当我在 RStudio 项目中工作时,我可以在脚本中进行相对于项目根目录的引用。所以我可以,例如,dfX = read.csv("Data/somefile.csv")
,其中文件夹 Data
是相对于我的项目根目录的。
knitr
block 中的相同代码找不到该文件。我猜这是因为 knitr
创建了一堆临时目录,它需要相对于文件位置进行引用。有没有一种简单的方法可以改变这种行为?显然,我不想将整个路径添加到项目文件夹——我知道我可以使用 knitr::opts_knit$set(root.dir = rootPath)
轻松完成此操作。这完全破坏了跨机器和操作系统的可维护性。
编辑: 这似乎与 this question 密切相关.
最佳答案
大概你知道调用'knit'时包目录的路径,那么怎么样:
ENV <- new.env()
assign("workingDirectory", getcwd(), envir = ENV)
knitr::knit(...,
# THE ENVIRONMENT IN WHICH THE CODE CHUNKS ARE TO BE EVALUATED
envir=ENV)
然后在你的 rmd 文件中你可以做:
```{r] print(workingDirectory)```
如果您正在搜索当前安装的位置,您可以使用:
PATH = NULL
for(libPath in .libPaths())
if('myPackage' %in% list.dirs(libPath,FALSE,FALSE)){
PATH = file.path(libPath,'myPackage')
}
if(is.null(PATH))
stop('could not find package directory')
ENV <- new.env()
assign("workingDirectory", PATH, envir = ENV)
knitr::knit(...,
# THE ENVIRONMENT IN WHICH THE CODE CHUNKS ARE TO BE EVALUATED
envir=ENV)
关于r - 为什么 knitr 不尊重 RStudio 项目细节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524914/