在每个元素的函数列表中应用每个函数作为第二个参数列表?

时间:2014-07-07 22:40:30

标签: r

我有两个清单。一个包含函数funcsList,每个函数接受一个参数,另一个包含参数argsList。 在第一个列表中调用每个函数的最佳(最有效)方法是什么,在第二个列表中的每个参数上 我想我可以在for循环中做到这一点,但我认为可能有一种更好(更平行)的方式。

每个函数定义为followis funcN< - function(arg){...}

因此,如果我在第一个列表中有3个函数,在第二个列表中有2个参数,则结果应包含6个元素的列表或大小为3 * 2的矩阵

2 个答案:

答案 0 :(得分:3)

如果我理解正确,你有两个列表,如

f<-list(sum, mean, median)
v<-list(1:3, 10:20)

您可以使用

获取两者的所有组合
outer(f,v, Vectorize(function(a,b) a(b)))

#      [,1] [,2]
# [1,]    6  165
# [2,]    2   15
# [3,]    2   15

outer负责将f值与v值相匹配,Vectorize确保只传递一个函数a每一次。

答案 1 :(得分:2)

这里的一些示例代码非常有用,但这是一种使用sapply

的方法
arglist <- list(one = rnorm(20),
                two = runif(20))

funclist <- list(mean,sd,var)

sapply(funclist,function(f) sapply(arglist,f))

         [,1]      [,2]      [,3]
one 0.1714100 0.8971787 0.8049297
two 0.5062332 0.3339033 0.1114914