我有一个功能需要我设置一个选项,即 stringsAsFactors=FALSE
.我太常见的方法是在函数开始时存储现有值
op <- option("stringsAsFactors")
并在调用之前
return(x)
一定要打电话options(op)
虽然这有效,但它是一个冗长而复杂的函数,可以从多个地方返回,所以我需要确保每个
return(x)
前面是 options(op)
,或创建一个仅执行此操作的小函数(本身在我的函数中):returnfunc <- function(x) {
options(op)
return(x)
}
所以我的问题是:有什么更好的方法可以做到这一点?特别是,可以防止函数因错误退出并保留参数(过度)修改?
最佳答案
有一个内置 on.exit
功能正是这样做的。例如
f<-function() {
op <- options(stringsAsFactors=FALSE)
on.exit(options(op))
read.table(...)
}
您可以在
options()
中更改您想要的任何选项调用并将更改之前的所有值作为列表返回,因此很容易重置。你可以传递任何你想要的表达式 on.exit
,在这里我们只是将选项设置回原来的样子。这将在函数退出时运行。见 ?on.exit
了解更多信息。
关于R 在函数内使用临时选项设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215294/