[问题] 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