在所有参数组合上应用函数(输出为列表)

时间:2015-06-06 19:47:58

标签: r apply

This solution几乎是我所需要的,但不适用于我的情况。 这是我尝试过的:

comb_apply <- function(f,...){
  exp <- expand.grid(...,stringsAsFactors = FALSE)
  apply(exp,1,function(x) do.call(f,x))
}

#--- Testing Code
l1 <- list("val1","val2")
l2 <- list(2,3)

testFunc<-function(x,y){
  list(x,y)
}

#--- Executing Test Code
comb_apply(testFunc,l1,l2)
comb_apply(paste,l1,l2)

适用于paste示例,但当我尝试Error in (function (x, y) : unused arguments (Var1 = "val1", Var2 = 2)时收到消息:testFunc

我的期望是得到结果:

list(list("val1",2),list("val1",3),list("val2",2),list("val2",3))

动机

我来自Mathematica,执行此操作非常简单:

l1 = {"val1", "val2"}
l2 = {2, 3}
testFunc = {#1, #2} &
Outer[testFunc, l1, l2]

我如何在R中完成?

2 个答案:

答案 0 :(得分:4)

经过一些尝试和错误尝试,我找到了解决方案。

为了让comb_apply起作用,我需要unname每个exp值才能使用它。这是代码:

comb_apply <- function(f,...){
  exp <- expand.grid(...,stringsAsFactors = FALSE)
  apply(exp,1,function(x) do.call(f,unname(x)))
}

现在,执行str(comb_apply(testFunc,l1,l2))我得到了所需的结果,没有更改testFunc

答案 1 :(得分:0)

我将<ol>mapply用于此,

plyr::mlply