計算が必要な非常に大きな行列があります。 forループはRが非常に遅いので、よりスマートな関数に置き換えたいと思います。大きな行列のforループを回避するR
ここでは、小さなサンプル行列で書いたforループを示します。
d <- matrix(c(1,1,0,0,1,1,1,0,0), 3,3)
for (i in 1:nrow(d)) {
for (j in 1:ncol(d)) {
if (d[i,j] == 1) {
d[j, i] =1
} else {d[j,i] = 0}
}
}
このコードはうまくここでD [I、J] = D [jは、i]は対称行列を得、望むような値を置き換えます。しかし、行列が大きいときには多くの時間とメモリが必要になります。それを達成するための効率的な代替手段は何でしょうか?ありがとうございました!!これはあなたに、対称行列を与えるどのようにこの程度
d[lower.tri(d)] <- (t(d)[lower.tri(d)] == 1)
ありがとうございました。これは私の問題を解決します。 – achimneyswallow