[問題] snow中使用parSapply 找不到函數

作者: f496328mm (為什麼會流淚)   2016-05-06 23:17:53
> sapply(c(1:10), function(x) actv_fun(data,bo_matrix,x))
[1] 0.5 0.5 0.5 3.0 1.5 17.5 9.0 0.5 2.5 2.5
> parSapply(cl,c(1:10), function(x) actv_fun(data,bo_matrix,x))
Error in checkForRemoteErrors(val) :
6 nodes produced errors; first error: 沒有這個函數 "actv_fun"
http://imgur.com/nMZbBme
一樣的東西 sapply都可以執行
但是為什麼用到parSapply
卻會出現沒有這個函數??
sapply不是可以用嗎?
該不會parSapply只能用內定的函數吧?
作者: JackBaska (Baska)   2016-05-06 23:21:00
這問題我上禮拜遇過,parallel的slave不會分享記憶區塊要重新載入或是重新定義package重新require/function重新定義或是用字串包在傳進去的資料list 使用 eval 重新宣告,雖然這樣用eval有點多餘,複製貼上就好,但我比較懶......記得所有資料要包起來傳進去,除非你的計算沒有外部資料我的意思是自己寫的function,如果你懶得一個一個複製貼進par裡面讓他重新在裡面宣告,可以包成字串然後用eva例子在我前幾天問Rmpi回應到板上得文最下面,重新requir其實想法只是,你開平行其實就是多開好幾個R,你R剛開只會有你預載給他的變數還有function,所以全部重來這樣講可能會比較好理解可參考 Wush 大的系列平行文章
作者: celestialgod (天)   2016-05-07 00:18:00
clusterExport(cl, "actv_fun")不用包進去eval,直接export出去就好套件用clusterEvalQ去做library/requiresnow package的套件說明 建議全部瀏覽一次
作者: JackBaska (Baska)   2016-05-07 00:29:00
還在摸之中,感謝Ce大

Links booklink

Contact Us: admin [ a t ] ucptt.com