在 R 中绘图时用点进行 mclapply
Posted
技术标签:
【中文标题】在 R 中绘图时用点进行 mclapply【英文标题】:mclapply with points when plotting in R 【发布时间】:2020-03-24 10:29:10 【问题描述】:根据 R 文档,mclapply() 是 lapply() 的并行版本,但在这个简单的示例中,当尝试与 points() 一起使用时,mclapply() 不起作用。有什么解决办法吗?
plot(c(0,3),c(0,1000), type='n')
x<-runif(100,0,1000); y<-runif(100,0,1000)
lapply(x,function(a) points(1,a,col='green')) #ok
mclapply(x,function(a) points(2,a,col='red')) #ko: does not work
【问题讨论】:
我认为在对 mclapply 的调用中不会对每个内核开放一个绘图设备。最好将结果(无论您的基础操作是什么)保存在列表中,然后绘制。 嗨@Marcinthebox 是正确的,因为并行化它不会加快速度,因为您需要将它放在同一个设备中。您可以直接将其写入 png,也可以尝试 1) xyplot in lattice 或 2) hexbin cran.r-project.org/web/packages/hexbin/index.html 【参考方案1】:这里是先用mclapply
记录结果,然后绘制的例子
library(parallel)
plot(c(0,3),c(0,1000), type='n')
x<-runif(100,0,1000); y<-runif(100,0,1000)
lapply(x,function(a) points(1,a,col='green')) #ok
L <- mclapply(x,function(a) data.frame(x = 2, y = a))
lapply(L, function(X) points(y~x, X, col='red'))
【讨论】:
感谢 Marc ,但我试图在绘图时进行平行化以加快绘图速度。有可能吗? 不,我认为这不会有帮助。如果问题是您有很多点要绘制,那么您不应该直接在绘图设备中执行此操作;相反,您应该打开像png
这样的输出绘图设备,并在使用dev.off()
关闭之前将所有绘图信息发送到那里。例如,请参阅此答案:***.com/a/17477296/1199289
知道了。所以我可能不得不将我的情节分成许多部分并合并许多情节。谢谢!以上是关于在 R 中绘图时用点进行 mclapply的主要内容,如果未能解决你的问题,请参考以下文章