我总是用:
开始我的脚本rm(list=ls())
清除我的工作区以避免不同脚本之间的冲突。但是,我正在寻找一种方法来将所有已更改的选项设置为其默认状态。例如,在某些脚本中,我需要通过设置来更改SS类型:
options(contrasts=c(unordered="contr.sum", ordered="contr.poly"))
在其他脚本中,我需要使用默认选项(因为它是默认选项,我不直接指定),即:
options(contrasts=c(unordered="contr.treatment", ordered="contr.poly"))
但是如果之前刚刚使用过具有更改选项的脚本,那么选项显然会在没有注意到的情况下进行更改。
是否有一个命令可以放在我的脚本之上,将R重置为默认选项?
答案 0 :(得分:10)
就像@chl所说,您可以在某处保存默认选项,例如在Rdata
文件中使用save
:
default_options = options()
save(default_options, file = "default_options.rda")
现在您可以从文件中加载这些默认值并应用它们:
load("default_options.rda")
options(default_options)
但是,我建议不要连续运行R脚本。相反,如果您在脚本之间共享功能,则只需创建捕获该功能的函数。您使用的脚本始终是自包含的,不受其他先前运行的脚本的影响。您设置的任何选项都是该脚本的本地选项,无需清空工作区或将选项设置为默认值。
请注意,我也从不保存我的工作环境,我总是使用转换原始数据的原始数据和脚本重建我的环境。如果有些部分花费了大量时间,我会将它们放在一个单独的脚本中,最后使用Rdata
保存save
文件。然后我使用load
在主脚本中加载它们。
答案 1 :(得分:1)
如果您使用Rstudio项目功能,您将立即解决所有问题。 有关为什么要避免使用rm(list = ls())
的详细信息,请参阅https://www.tidyverse.org/articles/2017/12/workflow-vs-script/答案 2 :(得分:1)
这是一个轻松优雅的单行,不需要需要任何手动检索默认值:
invokevirtual
default_opts <- callr::r(function(){options()}); options(default_opts)
是devtools随附的软件包(因此,如果您已安装devtools,您将已经拥有callr
)
callr
只需启动一个后台进程,因此我们可以使用callr::r
检索默认选项,并将其返回到当前的R会话
options()
答案 3 :(得分:0)
人们普遍认为以下内容可以避免脚本之间的冲突。
rm(list=ls())
不会。如果您不相信这一点,请尝试以下
library(dplyr)
library(raster)
rm(list = ls())
library(dplyr)
tibble::tibble(x = 1:10, y = 1:10) %>%
select(x)
select应该来自dplyr。但这是来自栅格。原因? rm(list = ls())
不会删除已加载的库。