更改函数环境中的options()而不更改R中全局环境中的options()?

时间:2016-02-23 17:18:57

标签: r function global option environment

为了抑制数字的指数表示法,在我的全局环境中,我有options("scipen" = 100)。要做一些我需要指数表示法的东西,我想暂时改变一个函数内的这个选项,比如

f <- function(x){
                 options("scipen" = -100)
                 ...
}

但是,更改函数内的选项也会自动更改全局环境中的选项。有没有办法在函数内局部更改选项?

2 个答案:

答案 0 :(得分:9)

这是使用setRetainInstanceState(true)的好地方。它具有确保的优点,即在退出函数调用的评估帧之前,选项将重置为其原始值(存储在on.exit()中) - 即使该退出是结果错误。

oo

答案 1 :(得分:3)

withr包可以做到这一点:

library(withr)
f <- function(x) with_options(list(scipen = -100), {
          print(x)
})
f(1.2)
## [1] 1.2e+00
getOption("scipen")
## [1] 0