【问题标题】:Is there a way to knitr markdown straight out of your workspace using RStudio?有没有办法使用 RStudio 直接从你的工作区中编织降价?
【发布时间】:2012-06-24 16:37:16
【问题描述】:

我想知道我是否可以使用knitr markdown 来即时创建一个包含来自我当前工作区的对象的报告。重现性不是这里的问题。我也读了这个很好thread here

但我仍然收到一条错误消息,抱怨找不到特定对象。

1) 假设我打开一个新的降价文档并保存它。

2) 在我的工作区中编写一个引用某个 lm 对象的块。拨打summary(mylmobject)

3) 编织它。

很遗憾,报告已生成,但由于找不到对象,因此无法显示回归输出。请注意,如果我只是将对象保存到 .Rdata 然后直接从降价文件加载它,它通常可以工作。

有没有办法在 R Markdown 中使用当前工作区中的对象? 在工作的同时向非 R 人员展示一些输出,这将是非常好的。

【问题讨论】:

  • 对我来说清除缓存解决了这个问题(我之前对某些块使用了 cache = T)

标签: r knitr rstudio


【解决方案1】:

RStudio 会为knit() 您的 R Markdown 文件打开一个 R 会话,因此您当前工作空间中的对象将无法用于该会话(它们是两个单独的会话)。两种解决方案:

  1. 向 RStudio 提交feature request,要求他们在当前 R 会话中支持编织,而不是强制启动新会话;
  2. 自己手动编织:library(knitr); knit('your_file.Rmd')(或knit2html(),如果您想一次性输出 HTML,或者rmarkdown::render(),如果您使用的是R Markdown v2

【讨论】:

  • 我觉得选项 1 与可重复研究的范式背道而驰。
  • @BrandonBertelsen 你是对的,这正是 RStudio 每次打开一个新的 R 会话的原因;相比之下,Emacs/ESS 在当前 R 会话中调用 Sweave/knitr。不过,使用现有的 R 会话有以下优点: 1. 可以更快; 2.帮助我们调试代码(例如检查源文档生成的对象)
  • 想知道 Rstudio 或 Knitr 自 2012 年发布以来是否有任何变化?
  • @ThomasSpeidel 抱歉,这方面没有。
  • 感谢您的回答。实际上,在最新版本的 RStudio/Rmarkdown 中,我无法按照您的答案运行它,但根据您的提示,我很快找到了解决方案:library(markdown); render('your_file.Rmd')(如果您想更新)。谢谢。
【解决方案2】:

使用以下方法保存其他会话中的数据可能更容易:

save.image("C:/Users/Desktop/example_candelete.RData")

然后将其加载到您的 MD 文件中:

load("C:/Users/Desktop/example_candelete.RData")

【讨论】:

  • 其实我现在就是这么做的。
  • 问题是我有一个非常大的会话,需要几分钟才能加载。我知道 Rstudio 的可重复性从何而来,但如果我们想使用 Markdown 制作包含大量数据的可呈现报告,我们需要手动编织。
  • 您可以选择使用 save(mylmobject) 而不是 save.image() 保存的内容
【解决方案3】:

Markdownreports package 专为动态解析 Markdown 文档而设计。

【讨论】:

    【解决方案4】:

    正如 Julien Colomb 评论的那样,我发现在这种情况下最好的办法是保存大对象,然后在我定制降价时显式加载它们。如果您的数据来自 ODBC,并且您不想在修改字体和主题时重复运行整个查询,那么这是必须的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多