正如Yihui Xie在this post中解释的那样,当使用RStudio IDE的Compile PDF按钮从.Rnw文件生成PDF时,knit()
使用globalenv()
的新的R会议。有没有办法让这个新的R会话使用我的项目的packrat
库(甚至包括在我的knitr
库中的packrat
版本)而不是我的个人用户库来确保最高水平的再现性?我想新的R会话必须与项目本身联系起来,但我不知道如何有效地做到这一点。
我知道我可以直接使用knit()
函数而不是编译PDF按钮,这样knit()
会使用我当前的globalenv()
,但我不喜欢这个解决方案因为它的重现性较差。
答案 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文件)。一些注意事项:
packrat
可以找到 library.R 脚本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
的新手。