【问题标题】:start a new R session in knitr在 knitr 中开始一个新的 R 会话
【发布时间】:2012-04-19 19:36:00
【问题描述】:

如何在knitr 中启动新的R 会话?我宁愿开始一个新会话,也不愿使用 rm(list=ls()) 之类的东西,因为它不等同。

<<myname>>=
#some R code
@
<<another_chunk>>=
#start a new R session
#more R code
@

【问题讨论】:

  • 也许来自epicalc 库的zap() 可以帮助您。您能否通过重新启动 R 来指定您希望获得的内容?
  • @EricD.Brean 公平的问题。我真的不太了解R,但我有很长的程序,我担心会留下很多东西(环境、对象等)。 zap 很有趣,但如果有一个干净的 R 会话,我会感觉更安全。
  • 所以,您没有具体问题,但您担心 R 会留下很多东西?我可以看到您可能会遇到来自 Windows 背景的担心,但我认为您无需担心。无论如何。

标签: r knitr


【解决方案1】:

好的,现在我有一些更重要的东西给你,灵感来自an answer on the R-help list by Georg Ruß。他建议了三件事来让 R 恢复到启动时的状态,我已经为你编写了这个六步手册。

首先,你保存一串你在启动时运行的包(这应该在其他任何事情之前完成,在你运行任何其他代码之前),

foo <- .packages()

其次,当你想重置 R 时,正如你所提到的,你运行

rm(list=ls()) 

删除所有对象。然后,第三,你跑,

bar <- .packages()

获取当前包的字符串。其次,

foobar <- setdiff(bar, foo)

第五,通过这个变通循环消除差异,

toRemove <- paste("package:", foobar, sep='') 
#or paste0("package:", foobar) in R-2.15.0 or higher
for(i in seq_along(foobar)) {           
    detach(toRemove[i], character.only=TRUE)    
}

第六,根据您的设置,您可以获取 .Rprofile

source(".Rprofile")

这应该将 R 置于启动时的状态。我可能忽略了一些东西。

【讨论】:

  • 谢谢,如果我发现有其他需要更改的地方,我会回复。
  • @RichieCotten,我把它放在那里是为了不让toRemove 留在环境中。您认为这会显着减慢循环速度吗?
【解决方案2】:

我建议您不要在 knitr 中启动新的 R 会话,而是在终端(或命令窗口)中启动新的 R 会话,如下所示:

R -e "library(knitr); knit('your_input.Rnw')"

如果你在Windows下,你必须将R的bin目录放入你的环境变量PATH(我已经很厌倦了描述如何做到这一点,所以如果你在Windows世界中你自己google一下,或查看LyX Sweave manual)。

然而,大多数编辑在调用 Sweave 或 knitr 时都会启动一个新的 R 会话,例如LyX 和 RStudio 等。你可以在http://yihui.name/knitr/demo/editors/ 找到更多可能的编辑器,我真的不认为需要在终端中调用R -e ...

【讨论】:

  • 感谢您提供此选项。我使用的是 Ubuntu,所以PATH 不是问题。
  • 我还是有问题。我需要在 within knitr 开始一个新的 R 会话。我试过 q() 来重置,但这不起作用。一个问题是我在我的 .tex 文件(没有花哨的编辑器)中的 knitr 块中获取 .R 文件,如下所示:source('file1.R') 然后是下一行 source('file2.R') 但我真的希望那些在不同的 R 会话中运行我认为它们运行相同。将 rm(list=ls())gc() 放在两个 sources 之间并不能解决我在使用 RAM 时遇到的问题。你有什么建议吗?
  • @XuWang 那是一个不同的问题。请参阅?source(特别是local 参数)。
  • 好的。我认为我对我遇到的问题的解释很差。我希望我现在已经更好地解释了这里的情况:stackoverflow.com/questions/12792047/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多