使用带有knitr的packrat库和rstudio编译PDF按钮

时间:2018-02-15 15:31:23

标签: r rstudio knitr packrat

正如Yihui Xie在this post中解释的那样,当使用RStudio IDE的Compile PDF按钮从.Rnw文件生成PDF时,knit()使用globalenv()的新的R会议。有没有办法让这个新的R会话使用我的项目的packrat库(甚至包括在我的knitr库中的packrat版本)而不是我的个人用户库来确保最高水平的再现性?我想新的R会话必须与项目本身联系起来,但我不知道如何有效地做到这一点。

我知道我可以直接使用knit()函数而不是编译PDF按钮,这样knit()会使用我当前的globalenv(),但我不喜欢这个解决方案因为它的重现性较差。

2 个答案:

答案 0 :(得分:1)

我想我自己也遇到了这个问题,但我希望与能够证实我是对的其他人分享,并可能有助于改善我的解决方案。

我的具体问题是我的.Rnw文件位于整个项目的子目录中。当“编译PDF”按钮创建新的R会话时,它将在此子目录中创建,因此无法找到将初始化.Rprofile的{​​{1}}文件。我认为最简单的解决方案是在我的子目录中创建一个包含

packrat文件
.Rprofile

我必须在temp <- getwd() setwd("..") source("packrat/init.R") setwd(temp) rm(temp) 之前更改项目级别的工作目录,因为文件本身引用了目录......

任何人都可以看到更好的解决方案吗?

答案 1 :(得分:0)

P。

我不知道该解决方案是否甚至适用于knitr软件包,但我99%确信它对我看来似乎适用于所有其他软件包。

(我相信)我有一个非常相似的问题。我有我的 project 文件夹,但是我的工作目录一直是 sub文件夹 ,其中我的 < em> .rnw 文件位于我的 project 文件夹的子目录中。

指向Yihiu Xie's答案的链接非常有帮助。

最初我想要一个项目文件夹,例如:

project-a/
               working/
                        data/
                                  datas.csv
                        analysis/
                                  library.R
                                  rscripts.R
                        rnw/
                                  report.rnw
                        child/
                                  preamble.rnw
                        packrat/

但是我不确定packrat是否可以在我的R library()调用不在工作目录中并且packrat无法解析.rnw文件的情况下(我称为库使用我的 .rnw 文件中的source()来自块的.R文件)。一些注意事项:

  • 我想使用 .Rproj 文件打开项目,并使用 project-a / working 作为工作目录
    • 如果属实,那么packrat可以找到 library.R 脚本
    • 但是 .rnw 文件在编译时仍默认为其自己的工作目录
  • 我认为带有knitr::opts_knit$set(root.dir = "..") .Rprofile 可以工作,但我认为它不适用于input\等乳胶命令,它默认返回包含 .rnw 文件的目录
    • 我认为这还不够,因为您有两个工作目录,一个用于r chunks,一个用于乳胶!

由于 .rnw 始终会设置工作目录,因此我将 library.R 脚本放置在同一目录中目录作为我的 .rnw 文件,该文件在 project-a / working / rnw 中创建packrat文件夹>。我99%确信这可行,因为在 project-a / working / rnw 文件夹中创建packrat文件夹时,无需重新定位 library.R 文件,它收到一个错误,找不到软件包,我无法编译 .rnw 文件。

project-a/
               working/
                        data/
                                  datas.csv
                        analysis/
                                  rscripts.R
                        rnw/
                                  report.rnw
                                  library.R
                                  packrat/
                        child/
                                  preamble.rnw

再次,除非我忽略了某些事情或误解了正在使用的软件包,否则这似乎对我有用。在此免责声明我是packrat的新手。

相关问题