为什么不编织尊重RStudio项目细节?

时间:2015-02-15 09:53:21

标签: r rstudio knitr

在所有其他情况下,当我在RStudio项目中工作时,我可以在脚本中相对于项目根目录进行引用。例如,我可以dfX = read.csv("Data/somefile.csv"),文件夹Data相对于我的项目根目录。

knitr块中的相同代码找不到该文件。我想这是因为knitr创建了一堆临时目录,需要相对于文件位置引用它们。有没有简单的方法来改变这种行为?显然,我不想将整个路径添加到项目文件夹中 - 我知道我可以使用knitr::opts_knit$set(root.dir = rootPath)轻松完成此操作。这完全打破了跨机器和操作系统的可维护性。


修改:这似乎与this question密切相关。

2 个答案:

答案 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或knitrsetwd()添加到包含正在编织的文件的目录中。因此,您可能需要执行dfX = read.csv("../Data/somefile.csv")之类的操作才能获得正确的引用。

我有一个工作示例here