我在使用apply函数时遇到了一些问题,它会将不需要的参数传递给函数。我知道apply不知道如何处理可选参数,只是将它们传递给函数。
但无论如何,这就是我想做的事情:
首先,我想指定一个我想要使用的函数列表。
我想创建一个函数,将这些指定的函数应用于数据集。
这个很好用。
当我尝试使用我的函数时,我得到了以下结果。
但无论如何,这就是我想做的事情:
首先,我想指定一个我想要使用的函数列表。
functions <- list(length, sum)
我想创建一个函数,将这些指定的函数应用于数据集。
myFunc <- function(data, functions) {
for (i in 1:length(functions)) print(apply(X=data, MARGIN=2, FUN=functions[[i]]))
}
这个很好用。
data <- cbind(rnorm(100), rnorm(100))
myFunc(data, functions)
[1] 100 100
[1] -0.5758939 -5.1311173
但我也想为一些函数使用额外的参数,例如:
power <- function(x, p) x^p
它们并不按照我的预期工作。如果我修改myFunc
为:
myFunc <- function(data, functions, ...) {
for (i in 1:length(functions)) print(apply(X=data, MARGIN=2, FUN=functions[[i]], ...))
}
functions
作为
functions <- list(length, sum, power)
当我尝试使用我的函数时,我得到了以下结果。
myFunc(data, functions, p=2)
Error in FUN(newX[, i], ...) :
2 arguments passed to 'length' which requires 1
我该如何解决这个问题?
很抱歉文字有点多。谢谢!