R使用函数内的临时选项设置

时间:2014-08-09 04:48:07

标签: r function options

我有一个功能,要求我设置一个选项,即stringsAsFactors=FALSE。我太常见的方法是在函数开始时存储现有值

op <- option("stringsAsFactors")

在致电return(x)之前,请务必致电

options(op)

虽然这有效,但它是一个冗长而复杂的函数,可以从几个地方返回,所以我需要确保每个return(x)前面都有options(op),或者创建一个小函数(它本身在里面)我的功能)只做那个:

returnfunc <- function(x) { options(op) return(x) }

所以我的问题是:什么是更好的方法呢?语法上,一个会阻止函数退出并出现错误并保留参数(过度)修改的文件?

2 个答案:

答案 0 :(得分:8)

内置on.exit功能就是这样做的。例如

f<-function() {
    op <- options(stringsAsFactors=FALSE)
    on.exit(options(op))

    read.table(...)
}

您可以在options()调用中更改所需的选项,并将更改前的所有值作为列表返回,以便轻松重置。你可以传递你想要的任何表达式on.exit,在这里我们只是将选项设置回原来的样子。这将在函数退出时运行。有关详细信息,请参阅?on.exit

答案 1 :(得分:1)

您还可以添加一个默认参数,允许用户根据需要进行更改,然后将参数传递给使用它的函数。

例如,

f <- function(x, stringsAsFactors = FALSE) {

        read.csv(..., stringsAsFactors = stringsAsFactors)

}

这样,您可以根据需要将其更改为TRUE,并且不会更改options()。你真的不想在函数内部弄乱options()