当允许在内部函数中缺少参数时,将包装器中的参数传递给内部函数 - 可能吗?

时间:2013-12-16 11:49:37

标签: r

我有一个函数,其中包含允许缺少的参数arg。如果缺少,则在foo内分配一些值。

foo <- function(x, arg) {
  if (missing(arg))
    arg <- TRUE
  arg
}

我想编写一个包装器,使用foosapply为列表的多个元素调用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参数传递它。

有办法吗?

1 个答案:

答案 0 :(得分:2)

您可以在致电arg之前检查sapply是否缺失:

foo_wrapper <- function(x, arg)
if(missing(arg)) sapply(x, foo) else sapply(x, foo, arg=arg)

但使用...可能更简洁。