apply
/ mapply
/ lapply
/sapply
または実行時間を短縮する他の方法を使用して、ネストされた for ループ コードをベクトル化しようとしています。私のコードは次のとおりです。
for (i in 1:dim){
for (j in i:dim){
if(mydist.fake[i,j] != d.hat.fake[i,j]){
if((mydist.fake[i,j]/d.hat.fake[i,j] > 1.5)|(d.hat.fake[i,j]/mydist.fake[i,j]>1.5)){
data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 1)
colnames(data1) = NULL
row.names(data1) = NULL
data = rbind(data, data1)
}else{
data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 0)
colnames(data1) = NULL
row.names(data1) = NULL
data = rbind(data, data1)
}
}
}
}
write.table(data, file = "fakeTest.txt", sep ="\t", col.names = FALSE, row.names = FALSE)
- rowNames は、すべてのデータ ポイントの行名のベクトルです。
data
データフレームですmydist.fake
とd.hat.fake
は距離行列 (対角線がゼロで、上三角と下三角の値が同じ) であるため、下三角の横断に関心があります (対角線の値も残します)。- 両方の行列の次元は同じです。
私が直面している主な問題は、として初期化されるj
ループのベクトル化です。j
i