R 无矢量化有趣参数调用外积

R 无矢量化有趣参数调用外积,r,vectorization,apply,R,Vectorization,Apply,我有一个带有向量参数的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,

我有一个带有向量参数的
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)))
具有所需的输出(显然,上述代码的实际结果是错误的)

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

或者使用
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

一些,也可以在评论中链接到早期的@agstudy帖子。谢谢这两个想法。我认为不可能将我的呼叫包装成
矢量化
;事实证明并非如此。你可以
矢量化
任何东西。就像“它会混合吗?”:-)
xx = expand.grid(1:2, 3:4)
mapply(function(x, y) length(c(x, y)), xx$Var1, xx$Var2)
[1] 2 2 2 2