R分叉和环境/指针

时间:2018-09-11 07:00:08

标签: r parallel-processing fork clone environment

尽管使用并行化R似乎可以复制从子进程返回的所有内容,即使对象未更改也是如此。特别是,请考虑以下示例:

env1 <- new.env()
envs2 <- lapply(1:4, function(x) env1)

cl<-makeCluster(2, type="FORK")
envs3 <- parLapply(cl, 1:4, function(x) env1)
envs4 <- parLapply(cl, 1:4, function(x) capture.output(str(env1)))
stopCluster(cl)

env1
envs2
envs3
envs4

首先,我创建一个环境(env1)。然后使用非并行lapply得到一个列表(envs2),其中所有条目都包含指向env1的指针。现在,当使用并行parLapply时,我得到的列表中的条目(envs3)包含指向不同对象的指针,这些对象应该是env1的克隆(还要注意,前两个条目包含与最后两个指针相同;据推测是因为我使用2个子节点进行长度为4的循环)。当子节点将其结果返回给主节点时,似乎发生了这种克隆。为此,我在子节点中将env1的指针保存到列表envs4

为什么在返回原始环境时会对其进行克隆?并且有办法使R不能克隆未更改的环境吗?

0 个答案:

没有答案