在所有其他情况下,当我在RStudio项目中工作时,我可以在脚本中相对于项目根目录进行引用。例如,我可以dfX = read.csv("Data/somefile.csv")
,文件夹Data
相对于我的项目根目录。
knitr
块中的相同代码找不到该文件。我想这是因为knitr
创建了一堆临时目录,需要相对于文件位置引用它们。有没有简单的方法来改变这种行为?显然,我不想将整个路径添加到项目文件夹中 - 我知道我可以使用knitr::opts_knit$set(root.dir = rootPath)
轻松完成此操作。这完全打破了跨机器和操作系统的可维护性。
修改:这似乎与this question密切相关。
答案 0 :(得分:0)
当你打电话给'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)
答案 1 :(得分:0)
我的猜测是你正在“编织”的文件本身在一个子目录中。看来,当您单击“编织PDF”时,RStudio或knitr
将setwd()
添加到包含正在编织的文件的目录中。因此,您可能需要执行dfX = read.csv("../Data/somefile.csv")
之类的操作才能获得正确的引用。
我有一个工作示例here。