我有一个功能,要求我设置一个选项,即stringsAsFactors=FALSE
。我太常见的方法是在函数开始时存储现有值
op <- option("stringsAsFactors")
在致电return(x)
之前,请务必致电
options(op)
虽然这有效,但它是一个冗长而复杂的函数,可以从几个地方返回,所以我需要确保每个return(x)
前面都有options(op)
,或者创建一个小函数(它本身在里面)我的功能)只做那个:
returnfunc <- function(x) {
options(op)
return(x)
}
所以我的问题是:什么是更好的方法呢?语法上,一个会阻止函数退出并出现错误并保留参数(过度)修改的文件?
答案 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()
。