R 当内部函数中允许缺少参数时,将参数从包装传递到内部函数-可能吗?

R 当内部函数中允许缺少参数时,将参数从包装传递到内部函数-可能吗?,r,R,我有一个函数,它的参数arg允许丢失。如果缺少,则在foo中为其分配一些值 foo <- function(x, arg) { if (missing(arg)) arg <- TRUE arg } 这将抛出一个错误,因为在foo_wrapper中计算时未找到arg > m <- list(1,2,3) > foo(m) [1] TRUE > foo_wrapper(m) Error in FUN(X[[1L]], ...) : argu

我有一个函数,它的参数
arg
允许丢失。如果缺少,则在
foo
中为其分配一些值

foo <- function(x, arg) {
  if (missing(arg))
    arg <- TRUE
  arg
}
这将抛出一个错误,因为在
foo_wrapper
中计算时未找到
arg

> m <- list(1,2,3)
> foo(m)
[1] TRUE
> foo_wrapper(m)

 Error in FUN(X[[1L]], ...) : argument "arg" is missing, with no default 
尽管如此,我还是想知道是否有办法在包装函数中显式地包含
arg
参数,而不是通过
dots
参数传递它


有办法吗?

在调用
sapply
之前,您可以检查
arg
是否丢失:

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

foo\u wrapper除非您特别不想要默认值,否则您可以编写
foo\u wrapper,确切地说,
arg=TRUE
,因为这是内部函数中的默认值问题是我想要与内部函数相同的默认值,并且没有:),但是通过
if,您实际上有一个默认值(失踪(arg))arg对于我们的示例,是的,但是对于我想要包装的函数,默认计算是一个相当困难的过程。因此,我必须在包装器中复制计算,这会变得有点混乱。我发现这是一个好主意!…不幸的是,这对我来说不可行,因为有几个参数是允许丢失的。因此将很快导致可能的呼叫组合数量快速增长,代码也会有些混乱。谢谢你的想法!
foo_wrapper <- function(x, ...) {
  sapply(x, foo, ...)
}

> m <- list(1,2,3)
> foo(m)
[1] TRUE
> foo_wrapper(m)
[1] TRUE TRUE TRUE
foo_wrapper <- function(x, arg)
if(missing(arg)) sapply(x, foo) else sapply(x, foo, arg=arg)