【发布时间】:2015-04-13 20:23:19
【问题描述】:
我遇到了一些应用函数在不需要时将参数传递给函数的问题。我知道 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
我该如何解决这个问题?
对不起,文字墙。谢谢!
【问题讨论】: