Rmpi从属函数调用用户定义函数时出错

Rmpi从属函数调用用户定义函数时出错,r,parallel-processing,mpi,sigpipe,R,Parallel Processing,Mpi,Sigpipe,我已经编写了一个Rmpi代码,在其中我希望主人与奴隶平等地分担工作负担。因此,函数work\u by_master执行mpi.bcast.cmdtowork\u by_slaves,这两个函数在执行发送-接收以交换结果之前都会调用work\u to\u be\u done\u per\u process 我不断地犯错误: Error in mpi.probe(source, tag, comm, status) : ignoring SIGPIPE signal Calls: work_by_m

我已经编写了一个Rmpi代码,在其中我希望主人与奴隶平等地分担工作负担。因此,函数
work\u by_master
执行
mpi.bcast.cmd
to
work\u by_slaves
,这两个函数在执行发送-接收以交换结果之前都会调用
work\u to\u be\u done\u per\u process

我不断地犯错误:

Error in mpi.probe(source, tag, comm, status) : ignoring SIGPIPE signal
Calls: work_by_master -> mpi.recv.Robj -> mpi.probe -> .Call
我努力去理解错误是什么,最后在投入了大量的时间之后,我间接地意识到错误可能来自这样一个事实,即从属函数不能以嵌套的方式调用用户定义的函数。当我将
work\u to\u be\u done\u per\u process
合并到
work\u by\u slaves
中,并且只让主进程调用
work\u to\u be\u done\u per\u process
时,错误得到了解决

我还将函数
work\u to\u be\u per\u process
复制到
work\u to\u be\u per\u process\u by_slaves
work\u to\u be\u per\u process\u by_master
,并让从属和主分别调用它们。即使这样也没有解决问题。因此,似乎只有我的上述结论才是原因


这是真的吗?还有其他人也遇到过这样的问题,即从机不能从内部调用用户定义的函数吗?有没有正确的方法。

根据我在R中并行处理的经验,集群get中使用的每个核心都是一个单独的R环境。所有这些环境都会像启动正常R会话一样进行初始化。因此,启动R会话时默认情况下未加载的任何已使用的定义函数都不可用。将它们加载到工作节点应该可以解决此问题。在a中,我演示了如何对雪簇执行此操作,可能对您有所帮助。

您没有选择正确的答案(因为您没有对任何问题进行选择)。如果我们帮助您解决stackoverflow问题,请勾选您认为正确的答案。通过这种方式,社区知道问题已经得到了回答,而回答者也获得了一些声誉。