将外部应用于矩阵内的列

时间:2013-08-17 16:10:31

标签: r vectorization outer-join

我有两个矩阵: x

A B C
2 3 4
3 4 5

和y

D E
1 2
3 2

如何减去列中元素的组合?给我以下结果:

AD AE BD BE CD CE
1  0  2  1  3  2
0  1  1  2  2  3

我尝试过应用外部,但不能使它适用于矩阵。矢量化函数会成为解决方案吗?我已经尝试过下面的代码,但似乎没有用。

vecfun= Vectorize(fun)
fun=function(a,b)(a-b)
outer(x,y, vecfun)

提前感谢任何建议。

2 个答案:

答案 0 :(得分:3)

这不会使用outer,但会获得您想要的结果:

> do.call(cbind,lapply(1:ncol(x),function(i) x[,i]-y))
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    0    2    1    3    2
[2,]    0    1    1    2    2    3

答案 1 :(得分:3)

以下是没有循环/ *应用系列的另一种方法(假设您的矩阵为xy):

x[ , rep(seq_len(ncol(x)), each=ncol(y))] - y[, rep(seq_len(ncol(y)), ncol(x))]

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    0    2    1    3    2
[2,]    0    1    1    2    2    3

我不确定它是否会更快。但我认为这是一个有趣的方法。此外,在计算过程中,这将占用结果矩阵的两倍内存。