如何以智能方式在R中应用多个功能的组合?

时间:2014-12-06 00:15:58

标签: r

让我们假设我有四个功能。这些只是示例函数。在真实场景中,功能要复杂得多。

f1= function(data){
  data1= data*2
  return (data1)
}

f2= function(data){
  data1= data*4
  return (data1)
}

f3= function(data){
  data1= data*data
  return (data1)
}

f4= function(data){
  data1= data**5
  return (data1)
}

data = matrix(1:100,10,10)

现在我想应用所有这些功能的组合,并查看每个

的输出
f1 then f2
f1 then f3
f1 then f4
... f1 then f2 then f3, 
f1 then f2 then f4.... 
f1 then f2 then f3 then f4.

我的问题是如何巧妙地应用所有这些功能的组合。

1 个答案:

答案 0 :(得分:1)

首先,我会把你的功能放在一个列表中

ff <- list(f1=f1,f2=f2,f3=f3,f4=f4)

然后这里有一个辅助函数来生成列表中所有可能的元素组合列表

allcomb <- function(x) {
    do.call("c", lapply(seq_along(x), function(n) combn(x,n, simplify=FALSE)))
}

然后,您可以生成可以传递给Reduce()的函数列表,以便将它们按顺序应用于数据(并且我已添加setNames()以确定每个结果的来源)< / p>

setNames(
    lapply(
       allcomb(ff),
       function(X) Reduce(function(d,f) f(d), X, init=data)
    ),
    sapply(allcomb(names(ff)), paste, collapse=":")
)