我有一个包装器函数,在这里我需要将可选参数传递给指定的子函数。但是有太多不同的可能子功能,我无法预先指定它们。
作为引用,这些子功能存在于环境等中。
考虑:

funInFun<- function (x, method, ...) {

  method.out <- function(this.x, FUN, ...) {
    FUN <- match.fun(FUN)
    c <- FUN(this.x, ...)
    return(c)
  }

  d <- method.out(x, method)
  return(d)
}

data<-seq(1,10)
funInFun(data, mean) #  Works

data<-c(NA,seq(1,10))
funInFun(data, mean, na.rm=TRUE) # Should remove the NA

funInFun(c(seq(1,10)), quantile, probs=c(.3, .6))  # Shoudl respect the probs option.

最佳答案

您需要将...传递给method.out。然后工作正常:

funInFun<- function (x, method, ...) {

  method.out <- function(this.x, FUN, ...) {
    FUN <- match.fun(FUN)
    c <- FUN(this.x, ...)
    return(c)
  }

  d <- method.out(x, method, ...)  # <<--- PASS `...` HERE
  return(d)
}

data<-seq(1,10)
funInFun(data, mean) #  Works
# [1] 5.5

data<-c(NA,seq(1,10))
funInFun(data, mean, na.rm=TRUE) # Should remove the NA
# [1] 5.5

funInFun(c(seq(1,10)), quantile, probs=c(.3, .6))
# 30% 60%
# 3.7 6.4

关于r - 将包装函数内部的可选参数传递给子函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18323340/

10-15 23:28