2016-06-21 61 views
0

我有一個大約25L行的數據集,其中應用了此功能「狀態」。它是一個標記程序。在fn內部,矢量化操作並使用應用函數。 c1-c4是我數據中的列。大約需要5-6小時才能執行fn。如何拆分數據框並在其上並行運行定製功能?

status(mydata) 
status <- function (x) { 

x<- subset(x, x$RECORD_TYPE != "INPUT") 
x$c1<- as.character(x$c1) 
x$c2 <- as.factor(x$c2) 
x$c3 <- as.factor(x$c3) 
return (data.frame(cbind( 
     tapply(x$c2, x$c4, 
      function (x) ifelse (!(any(x=="BAD")), "G", sum(x== "BAD"))) , 
     tapply(x$c2D, x$c4, 
      function (x) sum (x== "NEG")) ))) 
       } 

有什麼辦法可以進一步加速fn。我在一個有16個內核的服務器上工作。所以我相信它可以進一步加快。

+0

請爲別人提供一個小的可重複的例子去測試 – akrun

回答

0

或許data.table做法會比試圖並行代碼更快,但我需要你的數據做出的樣品肯定這個答案解決你的問題:

library(data.table) 

setDT(mydata) 

mydata[ RECORD_TYPE != "INPUT", 
        .(var1 = ifelse (!(any(c2=="BAD")), "G", sum(c2== "BAD")), 
        var2 = sum (c2D== "NEG")), by= c4]