使用RStudio编译RMarkdown:为什么需要读取.RProfile文件?

6
当我在RStudio中从.Rmd文件编译HTML时,为什么它会尝试读取我的.RProfile文件?
我的意思是,我按下“Knit HTML”按钮,然后它实际上尝试执行我在.RProfile中的所有内容,加载那里提到的每个库,然后尝试源外部文件失败(我有一堆自编函数在.RProfile中,像source('/Users/me/.rstudio-desktop/lib/lib.stocks.R')等行)。
目前,我必须在编译过程中(编织)将.RProfile从主目录移出,但可能应该有某种选项或其他东西?
感谢任何建议:)。
OS X 10.8.5,RStudio版本0.98.1091

1
我没有一个很好的答案,但一个解决方法可能是 if (interactive()) {## do things for normal r session} else {do other things for non-interactive session, ie, knitr compiling} 把这个放在你的 .rprofile 文件中,我忘了这一部分。 - rawr
谢谢,@rawr,这个方法有效 :). 但还是很有趣,为什么它一开始就会这样做... - A S
1
不确定knitr文档是一个新的R会话还是只创建了一个新环境,但无论哪种方式,R都会正常启动,这意味着它将首先读取您的.rprofile并执行其中的任何操作。我认为您可以在engine.opts块选项中传递--vanilla,但看起来并非如此。 - rawr
2个回答

7
那就是 .Rprofile 的定义。当 R 启动时,它会读取并执行这个文件。RStudio 启动一个新的 R 会话来编译 R Markdown 文档,并且该 R 会话会读取 .Rprofile,除非你告诉该 R 会话不要读取它(例如通过 R --no-init-file 或 R --vanilla),但目前你无法真正控制 RStudio 如何启动 R 会话。我认为 @rawr 提到的 if (interactive()) 是一个非常好的想法,这也是我日常工作中使用的方法(我希望我的非交互式 R 会话是“干净”的)。

0

我刚开始使用RStudio中的项目,如果我误解了问题或做了一些愚蠢的事情,请指教。但听起来问题实际上是你的.Rprofile对于特定文档来说过于庞大。

如果您为给定文档创建一个新项目,它们将拥有自己的.Rprofiles,可以根据文档的需求进行调整。

更具体地说,我制作了一个模板,每次启动新项目时只需复制/粘贴即可。它只是一个看起来像这样的文件夹:

项目模板(文件夹)

  • 数据(文件夹)
  • 脚本(文件夹)
  • 输出(文件夹)
  • 文档(文件夹) New Project.Rproj .Rprofile

.Rprofile包括我总是使用的tidyverse和其他软件包,我会根据需要添加其他软件包。当然,如果您正在处理需要大量大型和/或自制软件包的大型项目,并且您只是尝试在该项目中创建一个小文档,则会再次遇到该问题。

我相信您很久以前就解决了这个问题,但我希望这可以帮助任何遇到类似问题的人(就像我一样)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接