我試圖優化r中的一個循環,該循環計算向量中關於數據幀中每一行的每個元素的字符串匹配數量。在小數據集中,它工作得很好(〜15分鐘; 11列,914行)。但是,運行龐大的數據集需要數天(914列,18.000行)。這是我非常基本的循環:加速r循環字符串匹配(矢量與數據幀)
for (j in 1: dim(pddbnh)[1]){
for (i in 1:dim(pidf)[1]){
richa[i,j] <- length(pidf[i,][pidf[i,] == row.names(pddbnh)[j] ])
}
}
我想知道是否有人知道如何使用其他方法(如矢量化)優化此循環。任何解決方案將非常感謝!
UPDATE 這是一個小數據集。這是最快的國家之一
df<-data.frame(replicate(10,sample(c("sp1", "sp2"),10,rep=TRUE)))
vec<-c("sp1", "sp2")
richa <- data.frame()
for (j in 1:length(vec)){
for (i in 1:dim(df)[1]){
richa[i,j] <- length(df[i,][df[i,] == vec[j] ])
}
}
是的,我可能知道如何做到這一點。請爲測試提供一個最小可重現的示例。 – Roland
謝謝!以下是兩個文件:https://www.dropbox.com/s/vvksp7c1kerqjbq/pddbnh.csv?dl=0 https://www.dropbox.com/s/zjt9shku0gjf03t/pidf.csv?dl=0 – CristianR
(顯然你還沒有對SO進行徹底搜索,因爲有許多問答關於提高for循環的性能。)詢問'['處理'[pidf [i,] == row.names(pddbnh)[ j]]似乎註定要失敗。該參數的結果將在強制後爲0或1(因此應該出現關於長度爲零的替換的錯誤)。也許你應該解釋你實際嘗試的是什麼。 –