【问题标题】:Calling outer product without vectorized FUN argument在没有矢量化 FUN 参数的情况下调用外积
【发布时间】:2014-03-04 22:06:38
【问题描述】:

我有一个带有向量参数的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 这样直接的东西?

【问题讨论】:

  • 一些 history here,在 cmets 中也链接回了之前的 @agstudy 帖子。

标签: r vectorization apply


【解决方案1】:

要么使用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

【讨论】:

  • 感谢这两个想法。我认为不可能将我的电话转入Vectorize;事实证明,它不是。
  • 你可以Vectorize 靠近任何地方。这就像“它会混合吗?” :-)
猜你喜欢
  • 2020-03-26
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多