如何让我的R会话香草?

时间:2012-09-22 02:11:44

标签: r environment

这是对上一个问题How can I ensure a consistent R environment among different users on the same server?

的澄清的跟进

我想从R内进入“vanilla”R会话,例如类似于我使用命令R --vanilla启动R时获得的内容。例如,我想编写一个不受特定用户自定义设置混淆的脚本。

特别是,我想要以下

  • 不会读取R历史记录,个人资料或环境文件
  • 不会从以前的会话重新加载数据或对象

help("vanilla")不会返回任何内容,而且我对自定义设置的范围不够熟悉,无法知道如何摆脱所有这些设置。

有没有办法进入新的香草环境? (?new.env似乎没有帮助)

2 个答案:

答案 0 :(得分:6)

恕我直言,可重现的研究交互式会议并不能很好地融合在一起。您应该考虑编写从命令行调用的可执行脚本,而不是从打开的交互式会话编写。在脚本的顶部,将--vanilla添加到shebang:

#!/path/to/Rscript --vanilla

如果您的脚本需要读取输入(参数或选项),则可以使用?commandArgs或两个包getoptoptparse中的一个来从命令行解析它们。< / p>

如果用户确实需要在交互式会话中完成自己的工作,那么他仍然可以通过system()调用您的脚本:您的脚本仍将使用自己的vanilla会话。通过输入和输出只需要一些额外的工作。

答案 1 :(得分:4)

你不能只是让你当前的会话香草,但你可以从R内开始一个新的vanilla R会话

> .Last <- function() system("R --vanilla")
> q("no")

我认为您可能会遇到上述问题,因为在R重新启动后,您的其余脚本将无法执行。使用以下代码,R将在退出之前运行.Last.Last将告诉它重新启动而不读取站点文件或环境文件,并且不打印启动消息。重新启动后,它将运行您的代码(以及进行其他一些清理)。

wd <- getwd()
setwd(tempdir())
assign(".First", function() {
  #require("yourPackage") 
  file.remove(".RData") # already been loaded
  rm(".Last", pos=.GlobalEnv) #otherwise, won't be able to quit R without it restarting
  setwd(wd)
  ## Add your code here
  message("my code is running.\n")
}, pos=.GlobalEnv)

assign(".Last", function() {
  system("R --no-site-file --no-environ --quiet")
}, pos=.GlobalEnv)
save.image() # so we can load it back when R restarts
q("no")