我有多个函数处理可能缺失的参数。
例如,我有
mainfunction <- function(somearg) {
mytest(somearg)
fun <- function() { subfunction(somearg) }
fun()
}
具有趣味性的一点是,
mytest(somearg)
与参数的唯一交互是它测试参数是否不存在。mytest = function(somearg) {
print(missing(somearg))
}
subfunction
再次测试其是否丢失并相应地进行处理:
subfunction = function(somearg) {
if (missing(somearg))
somearg = NULL
else
somearg = matrix(somearg, cols = 2)
# somearg is used here…
}
使用
matrix(somearg, cols = 2)
的时候,somearg
缺失会导致此操作失败,并显示:在调试过程中,我发现以下情况: 1)在argument "somearg" is missing, with no default
mainfunction
开始时,missing(somearg)
返回 TRUE
。 2)在 mytest
中,missing(somearg)
返回 TRUE
。 3)在 subfunction
中,missing(somearg)
返回 FALSE
。 因此,虽然实际上缺少了参数 somearg
,但是却进入了 matrix
分支,导致操作失败。
subfunction
,而是从一个嵌套函数中调用它,这会在参数somearg
上创建一个闭包。似乎闭包无法处理缺少的参数。我不确定这是一个错误还是“按设计来的”:在fun
中,somearg
不是一个参数,它是一个普通变量,因此不能缺失。 - Konrad Rudolphmissing
只能在定义参数的函数的立即体中使用,不能在嵌套函数或local
调用的体中使用。” - Rolandis.null(arg)
进行测试时就不会出现任何问题。 - Ben Bolker