R - “应用”2个矩阵

时间:2013-03-19 16:37:52

标签: r apply

我正在进行R任务,我必须编写一个执行dist.xyz所做的功能。

dist.xyz(a, b = NULL, all.pairs=FALSE) 

a和b是数字矩阵,函数计算相应行之间的距离 'a'和'b'。

我尝试了一个for循环(如下所示),但是它花了太长时间,“apply”只允许我们一次对1个矩阵进行操作。

 dis = vector()
 for (i in 1:nrow(a)) {
    append(dis,sqrt(sum((a[i,] - b[i,]) ^ 2)))
 } 

有没有办法“应用”两个矩阵?

提前致谢

1 个答案:

答案 0 :(得分:1)

如果您有示例数据会更容易。但这是我的看法。对于2个矩阵的“应用”,这不是一般解决方案。但是,在您的情况下,您只需要申请单个矩阵a-b,因为每行的元素差异是您首先采用的。然后将square,sum和square root应用于每一行以获得结果。

set.seed(7)   # just to ensure reproducible results

rowDist<-function(a,b) {
   apply(a-b,1,function(x)sqrt(sum(x^2)))
}

a<-matrix(rnorm(25),5,5)
b<-matrix(rnorm(25),5,5)

rowDist(a,b)
#[1] 2.716251 2.685056 3.699462 2.125998 3.437412