この質問は、ユーザー定義関数を複製する方法を尋ねていたこの質問に関連しています。ここで、時間を節約するために操作を並列化したいと思います。私が事前に行ったことは次のとおりです。
行と列の行列
my.fun()
を返すカスタム関数を定義しました。output
1000
20
私はsaytimesを複製
5
しoutput
、結果を次のように呼び出される単一の行列に格納しfinal
ますfinal <- do.call(rbind, replicate(5, my.fun(), simplify=FALSE))
。したがって、この例final
では5000
-rows行列です。
私が今やりたいのは、結果をマトリックスoutput
にバインドする前に、5つ(またはそれ以上)の複製を並列化することです。final
どのようにそれをしますか?私がこれまでに(間違って)行ったことは次のとおりです。
library(snowfall)
sfInit(parallel = TRUE, cpus = 4, type = "SOCK")
# previously defined objects manipulated within my.fun
sfExport(...)
my.fun = function() {
...
return(output)
}
final <- do.call(rbind, sfSapply(1:5, fun=my.fun(), simplify=FALSE))
sfStop()
しかし、それは戻ります:
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'fun' of mode 'function' was not found
どんな助けでも大歓迎です!必ずしも使用したくないことを考慮してください。-snowfall-
最終的な目標は、の計算をfinal
効率的な方法で並列化することです(実際には、多くの複製を作成する必要があります)。