如何在Rstudio Markdown中使用来自全局环境的对象

Ada*_*son 37 r rstudio knitr

我在Stack Overflow上看过类似的问题,但几乎没有确凿的答案,当然也没有对我有用的答案.

在Markdown(Rstudio)脚本中访问和使用位于全局R环境中的对象(回归拟合,数据框架,其他对象)的最简单方法是什么.

鉴于RStudio团队倾向于让事情变得舒适和有效,我觉得令人惊讶的是,没有简单的解决方案.

提前致谢.

Jon*_*han 46

无论好坏,这种遗漏都是故意的.依赖在文档外部创建的对象会使文档的可重现性降低 - 也就是说,如果您的文档需要全局环境中的数据,那么您不能仅仅向某人(或您自己在两年内)提供文档和数据文件并让它们重新创建它本身.

出于这个原因,为了在后台执行渲染,RStudio实际上创建了一个单独的R会话来渲染文档.该背景R会话无法看到您在RStudio中看到的交互式R会话中的任何环境.

解决此问题的最佳方法是使用您用于创建全局环境内容的代码并将其移动到文档中(echo = FALSE如果您不希望它显示在文档中,则可以使用).这使您的文档自包含且可重现.

如果您不能这样做,可以采取一些方法直接在全局环境中使用数据:

  1. 而不是使用Knit HTML按钮,rmarkdown::render("your_doc.Rmd")在R控制台上键入.这将编织当前会话而不是后台会话.或者:

  2. 在渲染之前将您的全局环境保存为.Rdata文件(使用R的保存功能),并将其加载到文档中.

  • 但是如果我不想每次“编织”时都重新运行所有代码呢?因为我的数据集很大(几百万行,> 200 个变量)所以重新运行代码将非常耗时。降价可以跳过重新重新启动一些块吗?我还没有找到这样的论点,即。 (6认同)
  • 也可以使用`knitr :: knit("your_doc.Rmd")`.R Studio"Knit HTML"按钮可能正在使用rmarkdown或knitr引擎,具体取决于一个人的偏好设置,并且在某些情况下它们的行为可能略有不同 (5认同)
  • 问题解决了(cache.lazy = T).谢谢你们两个. (4认同)
  • 谢谢亚当。我遇到了一些问题,但找到两种方法会有所帮助。1.将 knitr::opts_chunk$set(cache =TRUE) 添加到您的 rmarkdown 文件中并运行它。2. 在 r 控制台命令 rmarkdown::render("your_file.Rmd") 中运行。 (2认同)

小智 7

好吧,就我而言,我找到了以下解决方案:

(1) 将您的全球环境保存在 .Rdata 文件中,该文件位于您的 .Rmd 文件所在的同一文件夹中。(您只需点击“全球环境”面板上的令人不安的图片即可)

(2) 在你的Rmarkdown脚本中写入以下代码:

load(file = "filename.RData") #  it load the file that you saved before
Run Code Online (Sandbox Code Playgroud)

并停止痛苦。


Pat*_*k_P 6

转到 RStudio\xc2\xb4s“工具”和“全局选项”并访问“R Markdown”选项卡,您可以在“评估目录中的块”中进行选择,然后选择选项“文档”和 R Markdown 编织引擎将像普通 R 代码一样访问全局环境。希望这对搜索此信息的人有所帮助!

\n