0

私は R の割り当てを行っており、その機能を実行する関数を作成する必要がdist.xyzあります。

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

a と b は数値の行列で、関数は 'a' と 'b' の対応する行間の距離を計算します。

for ループを試しましたが (以下のように)、時間がかかりすぎて、「適用」では一度に 1 つの行列に対してしか操作を実行できません。

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

2 つの行列に「適用」する方法はありますか?

前もって感謝します

4

1 に答える 1

1

サンプルデータがあれば簡単です。しかし、これが私の見解です。これは、「2 つの行列に適用」するための一般的な解決策ではありません。ただし、あなたの場合、各行の要素ごとの違いが最初に取得されるため、単一の行列 ab のみを適用する必要があります。次に、各行に平方、和、平方根を適用して結果を取得します。

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
于 2013-03-19T16:48:52.453 に答える