2016-06-21 7 views
0

私はこの関数 "status"が適用されている約25L行の大きなデータセットを持っています。そのフラグ付けの手順。 fnの内部では、演算がベクトル化され、適用関数が使用されます。 c1〜c4は自分のデータの列です。それでもfnを実行するには約5-6時間かかります。データフレームを分割してパラレルにカスタム機能を実行するにはどうすればよいですか?

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] 
関連する問題