【问题标题】:How to apply combination of multiple functions in R in a smart manner?如何以智能的方式在 R 中应用多个功能的组合?
【发布时间】:2014-12-06 00:15:57
【问题描述】:

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

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.

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

【问题讨论】:

  • 你是说要看看这些函数的所有应用组合?
  • 请从您的问题标题中删除“一个棘手的问题”。没用。
  • 是的。我想看看这些功能的组合应用。
  • 订单对你来说重要还是你只关心他们被应用

标签: r


【解决方案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() 以识别每个结果的来源)

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

【讨论】:

  • 显然顺序很重要,因此您还需要查看 allcomb 结果中向量的所有排列。
  • 这与我需要的类似(我需要置换)。但是,我尝试将 combn 更改为 permn,但它并没有按我需要的方式工作。这是因为 perm 只给出了 4 的排列,而不是小于 4 的排列。有解决办法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多