我有一个函数,其中包含允许缺少的参数arg
。如果缺少,则在foo
内分配一些值。
foo <- function(x, arg) {
if (missing(arg))
arg <- TRUE
arg
}
我想编写一个包装器,使用foo
或sapply
为列表的多个元素调用lapply
。我想传递arg
参数如下。
foo_wrapper <- function(x, arg) {
sapply(x, foo, arg=arg)
}
如果在arg
内进行评估,则会发现错误,因为找不到foo_wrapper
。
> m <- list(1,2,3)
> foo(m)
[1] TRUE
> foo_wrapper(m)
Error in FUN(X[[1L]], ...) : argument "arg" is missing, with no default
现在,我可以使用dots
参数来实现这个目的。
foo_wrapper <- function(x, ...) {
sapply(x, foo, ...)
}
> m <- list(1,2,3)
> foo(m)
[1] TRUE
> foo_wrapper(m)
[1] TRUE TRUE TRUE
但是,我想知道是否有办法明确地在包装函数中包含arg
参数,而不是通过dots
参数传递它。
有办法吗?
答案 0 :(得分:2)
您可以在致电arg
之前检查sapply
是否缺失:
foo_wrapper <- function(x, arg)
if(missing(arg)) sapply(x, foo) else sapply(x, foo, arg=arg)
但使用...
可能更简洁。