让我们假设我有四个功能。这些只是示例函数。在真实场景中,功能要复杂得多。
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.
我的问题是如何巧妙地应用所有这些功能的组合。
答案 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=":")
)