我有一個雙重循環,我不僅不喜歡,但需要14天才能在我的計算機上運行,因爲它將以大約.1212次的迭代超過3200條記錄和1090個變量。比較記錄結果和雙循環
可重複性較小的位。它只是檢查兩個記錄之間同一列中有多少個數字,不包括NA。然後它將結果附加到原始數據框。
y <- data.frame(c(1,2,1,NA,NA),c(3,3,3,4,NA),c(5,4,5,7,7),c(7,8,7,9,10))
resultdf <- NULL
for(i in 1:nrow(y))
{
results <- NULL
for(j in 1:nrow(y))
{
results <- c(results,sum((y[i,]==y[j,]),na.rm=TRUE))
}
resultdf <- cbind(resultdf,results)
}
y <- cbind(y,resultdf)
我有重複計算,可能可以避免離開大約7天。
如果我理解正確,幾個應用函數在C中可能會更快。儘管如此,我還沒有得到任何工作。我也很好奇,如果有一個包會跑得更快。任何人都可以幫助加速計算?
謝謝!
你應該首先看看在開始之前將'y'轉換爲矩陣的速度有多快......我認爲重新排列'outer(y,y,「== 「)'''適當地,並採取行或列的總結,但我沒有時間去處理它現在... – 2012-03-05 21:15:51
...我假設通過」重複計算「你談論循環所有(我,j )而不僅僅是較低或較高的三角形...... – 2012-03-05 21:21:23
更改爲矩陣將整個事件加速至16分鐘左右。謝謝你的提示!是的,它重複計算而不是計算其中一個三角形。你會怎麼做呢?我猜它是在循環結尾添加i < - i + 1來重新計算下邊界,但我從來沒有這樣做過。你如何將它複製到另一個三角形? – ARobertson 2012-03-05 21:37:34