我有一个带有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
那样简单的事情?
答案 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