关于,this question ,我试图找出将函数列表应用于值列表的最简单方法。基本上是一个嵌套的lapply
。例如,在这里我们将sd
和mean
应用于内置数据集trees
:
funs <- list(sd=sd, mean=mean)
sapply(funs, function(x) sapply(trees, x))
要得到:
sd mean
Girth 3.138139 13.24839
Height 6.371813 76.00000
Volume 16.437846 30.17097
但我希望避免使用内部
function
并使用类似以下内容:sapply(funs, sapply, X=trees)
这不起作用,因为
X
与第一个sapply
匹配,而不是第二个。我们可以使用functional::Curry
做到这一点:sapply(funs, Curry(sapply, X=trees))
但我希望也许有一种巧妙的方法可以解决我所缺少的位置和名称匹配问题。
最佳答案
由于mapply
使用省略号...
传递 vector (原子或列表),而不是像sapply, lapply, etc ...
那样传递命名参数(X),因此如果您使用mapply而不是sapply,则无需命名参数X = trees
:
funs <- list(sd = sd, mean = mean)
x <- sapply(funs, function(x) sapply(trees, x))
y <- sapply(funs, mapply, trees)
> y
sd mean
Girth 3.138139 13.24839
Height 6.371813 76.00000
Volume 16.437846 30.17097
> identical(x, y)
[1] TRUE
您距离您将要找到的信只有一封信! :)
请注意,我使用了
funs
的列表,因为无法创建函数的数据框,但出现错误。> R.version.string
[1] "R version 3.1.3 (2015-03-09)"
关于r - 将功能列表应用于值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759367/