我很惊讶这missing
似乎无法在lapply
. 假设我有以下功能:
.add <- function(x, arg, ...) {
if (missing(arg)) {
arg <- 1
}
print(match.call())
return(x + arg)
}
wrapper <- function(l, arg, ...) {
return(lapply(l, .add, arg=arg, ...))
}
设置arg
明确的作品,如例外:
wrapper(list(x=1:10, y=1:10), arg=1)
#FUN(x = X[[1L]], arg = ..1)
#FUN(x = X[[2L]], arg = ..1)
#$x
# [1] 2 3 4 5 6 7 8 9 10 11
#
#$y
# [1] 2 3 4 5 6 7 8 9 10 11
没有arg
我会期望相同的输出,但它失败了:
wrapper(list(x=1:10, y=1:10))
#FUN(x = X[[1L]], arg = ..1)
# Error in FUN(X[[1L]], ...) : argument "arg" is missing, with no default
missing
在使用 no 的嵌套包装函数中工作lapply
。为什么它似乎对调用的函数没有影响lapply
?
编辑:默认参数也不起作用:
.add <- function(x, arg=5, ...) {
if (missing(arg)) {
arg <- 1
}
print(match.call())
return(x + arg)
}
wrapper(list(x=1:10, y=1:10))
#FUN(x = X[[1L]], arg = ..1)
# Error in FUN(X[[1L]], ...) : argument "arg" is missing, with no default
似乎arg
既不丢失也不可用。这里会发生什么?
(我知道我可以通过设置arg=NULL
inwrapper
和if (is.null(arg))
in.add
或其他东西来规避这个问题。.add
是一个内部函数,arg
它根据输入(例如)自行确定arg=mean(x)
,我想arg
在其中wrapper
记录用户的参数arg
并允许用户覆盖默认行为。最重要的是:我想了解为什么这不起作用!)
EDIT2:最后这个行为是固定的。这是 R < 3.2.0 中的一个错误,请参阅PR#15707。