在没有矢量化FUN参数的情况下调用外部产品

时间:2014-02-07 13:12:17

标签: r vectorization apply

我有一个带有vector参数的d - 维函数,我试图在一个简单的d=2的简单网格中计算它的值。在这里尝试outer是很自然的,它完美地运作,即在简单的情况下

> outer(1:2, 3:4, function(x, y) x+y)
     [,1] [,2]
[1,]    4    5
[2,]    5    6

但是,我的功能不支持自然矢量化。为了说明,请考虑类似

的内容
> outer(1:2, 3:4, function(x, y) length(c(x, y)))

具有所需的输出(显然,上述代码的实际结果是错误)

     [,1] [,2]
[1,]    2    2
[2,]    2    2

我目前的解决方法与apply(expand.grid(1:2, 3:4), 1, length)类似,但对我来说这看起来有点笨拙。对于这种情况,有没有像outer那样简单的事情?

1 个答案:

答案 0 :(得分:6)

您可以使用Vectorize

“向量化”您的功能
outer(1:2, 3:4, Vectorize(function(x, y) length(c(x, y))))
     [,1] [,2]
[1,]    2    2
[2,]    2    2

或者使用expand.grid继续使用相同的想法,但使用mapply

xx = expand.grid(1:2, 3:4)
mapply(function(x, y) length(c(x, y)), xx$Var1, xx$Var2)
[1] 2 2 2 2