嵌套应用函数:变量混淆

时间:2015-09-08 15:37:22

标签: r apply

我有一些使用嵌套apply函数的代码。这有点不寻常,因为它使用了一系列函数,然后将它们输入到内部FUN的{​​{1}}参数中。

以下是代码行:

vapply

其中J <- sapply(X = J.int, FUN = vapply, X = t.vec, FUN.VALUE = numeric(1)) J.int生成的函数列表。正如可以预测的那样,代码对参数approx.fun感到困惑。我有一个解决方案,我将在下面发布,但它看起来并不优雅。如果任何人都可以为所有X函数创建一个易于通用的函数,或者建议一个替代解决方案,我希望看到答案。

为了重现性,请使用:

apply

1 个答案:

答案 0 :(得分:0)

我在问题中提到的当前解决方案是使用:

applyntd <- function(appFUN = apply, Xntd, FUNntd, MARGINntd, FUN.VALUEntd, simplifyntd, USE.NAMESntd, ...){
  appFUN <- match.fun(appFUN)
  if(identical(appFUN, apply)) return(function(Xntd, MARGINntd, FUNntd, ...) apply(X = Xntd, MARGIN = MARGINntd, FUN = FUNntd, ...))
  if(identical(appFUN, lapply)) return(function(Xntd, FUNntd, ...) lapply(X = Xntd, FUN = FUNntd, ...))
  if(identical(appFUN, sapply)) return(function(Xntd, FUNntd, ..., simplifyntd = T, USE.NAMESntd = T) sapply(X = Xntd, FUN = FUNntd, ..., simplify = simplifyntd, USE.NAMES = USE.NAMESntd))
  if(identical(appFUN, vapply)) return(function(Xntd, FUNntd, FUN.VALUEntd, ..., USE.NAMESntd = T) vapply(X = Xntd, FUN = FUNntd, FUN.VALUE = FUN.VALUEntd, ..., USE.NAMES = USE.NAMESntd))
}

然后:

J <- sapply(X = J.int, FUN = applyntd(vapply), Xntd = t.vec, FUN.VALUEntd = numeric(1))

这样可行,但applyntd功能似乎很麻烦。如果您有更好/更一般的想法,请告诉我。