衆所周知,R並不是運行大量分析的最有效的平臺。 如果我有包含三個參數的大數據幀:在R中的數據幀上劃分等值線
GROUP X Y
A 1 2
A 2 2
A 2 3
...
B 1 1
B 2 3
B 1 4
...
millions of rows
,我想跑對每個組計算(例如計算皮爾遜對X,Y R),並將結果保存在一個新的數據幀,我能做到這樣的:
df = loadDataFrameFrom(someFile)
results = data.frame()
for (g in unique(df$GROUP))){
gdf <- subset(df, df$GROUP == g)
partialRes <- slowStuff(gdf$X,gdf$Y)
results = rbind(results, data.frame(GROUP = g, RES = partialRes))
}
// results contains all the results here.
useResults(results)
明顯的問題是,這是很慢,即使在強大的多核機器。
我的問題是:是否有可能並行計算,例如爲每個組或一組組的單獨線程? 有沒有一個乾淨的R模式來解決這個簡單的分裂問題?
謝謝, Mulone
它可以並行化的方式很大程度上取決於計算的類型嗎? –
您是否故意嘗試儘可能地做到儘可能慢?我不確定你是否可以寫得更低效。 –
+1給Josh的評論。循環內部的「rbind」經常出現,也許R本身可以檢測並警告它。警告信息可能是「在for循環的最後一行中檢測到的,這可能非常慢。請參閱XYZ參考以獲得建議。「。在解析器中需要一個if()語句,也許吧? –