这是澄清上一个问题How can I ensure a consistent R environment among different users on the same server?的后续措施

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

我特别希望以下内容


不读取R历史记录,配置文件或环境文件
不会从以前的会话中重新加载数据或对象


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

有没有办法进入新的香草环境? (?new.env似乎无济于事)

最佳答案

您不仅可以使当前会话变为香草,还可以像这样从R内部开始一个新的香草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")

08-25 07:08