【问题标题】:How to set R to default options?如何将 R 设置为默认选项?
【发布时间】:2013-04-11 10:49:35
【问题描述】:

我的脚本总是以:

rm(list=ls())

清除我的工作区以避免不同脚本之间的冲突。但是,我正在寻找一种方法来将所有更改的选项设置为默认状态。例如,在某些脚本中,我需要通过设置来更改 SS 类型:

options(contrasts=c(unordered="contr.sum", ordered="contr.poly"))

在其他脚本中,我需要使用默认选项(因为它是默认选项,所以我不直接指定它),即:

options(contrasts=c(unordered="contr.treatment", ordered="contr.poly"))

但是如果之前刚刚使用了带有更改选项的脚本,那么该选项显然在我没有注意到的情况下发生了更改。

我可以在我的脚本之上添加一个命令来将 R 重置为默认选项吗?

【问题讨论】:

  • 是的,类似op <- options(...); your stuff here; options(op)

标签: r


【解决方案1】:

这是一个简单而优雅不需要手动检索默认值:

default_opts <- callr::r(function(){options()}); options(default_opts)

这是如何工作的:

callr 是 devtools 附带的一个包(所以如果你安装了 devtools,你就已经拥有了callr

callr::r 只是启动一个后台进程,因此,我们可以使用options() 检索默认选项并将它们返回到当前的 R 会话

示例

# Default option
options("scipen")
# $scipen
# [1] 0

# Set to something else
options(scipen = 999)
# $scipen
# [1] 999

# Reset to defaults:
default_opts <- callr::r(function(){options()}); options(default_opts)


# Did it work? yes, the option is back to its default value
options("scipen")
# $scipen
# [1] 0

【讨论】:

  • +1。我认为是您投票重新开放 stackoverflow.com/questions/36848785 。但是,如果它没有被重新打开并在那里发布,因为它已经被更多地查看了。
【解决方案2】:

就像@chl 所说,您可以将默认选项保存在某处,例如在使用saveRdata 文件中:

default_options = options()
save(default_options, file = "default_options.rda")

现在您可以从文件中加载这些默认值并应用它们:

load("default_options.rda")
options(default_options)

但是,我建议不要连续运行 R 脚本。相反,如果您在脚本之间共享功能,只需创建捕获该功能的函数。然后,您使用的脚本始终是独立的,不受其他先前运行的脚本的影响。然后,您设置的任何选项都是该脚本的本地选项,无需清空工作区或将选项设置为默认值。

请注意,我也从不保存我的工作环境,我总是使用原始数据和转换该原始数据的脚本来重建我的环境。如果有些部分需要花费大量时间,我会将它们放在一个单独的脚本中,最后使用save 保存一个Rdata 文件。然后我使用load 将它们加载到主脚本中。

【讨论】:

    【解决方案3】:

    如果您使用 Rstudio 项目功能,您将立即摆脱所有问题。 请参阅https://www.tidyverse.org/articles/2017/12/workflow-vs-script/ 了解有关为什么应避免使用 rm(list=ls()) 的更多详细信息

    【讨论】:

      【解决方案4】:

      人们普遍认为,以下将避免脚本之间的冲突。

      rm(list=ls())
      

      不会的。如果您不相信这一点,请尝试以下操作

      library(dplyr)
      library(raster)
      
      rm(list = ls())
      
      library(dplyr)
      
      tibble::tibble(x = 1:10, y = 1:10) %>% 
        select(x)
      

      选择应该来自 dplyr。但它来自光栅。原因? rm(list = ls()) 不会删除加载的库。

      【讨论】:

        猜你喜欢
        • 2012-11-16
        • 1970-01-01
        • 2018-10-30
        • 2016-10-01
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        相关资源
        最近更新 更多