【问题标题】:Use of recordPlot() and replayPlot() in Parallel in R to save plot in the same PDF在 R 中并行使用 recordPlot() 和 replayPlot() 将绘图保存在同一个 PDF 中
【发布时间】:2015-05-11 10:13:31
【问题描述】:

我想在 R 中使用 foreach 并行绘制数据,但我没有找到任何方法将我的所有绘图都放在同一个 pdf 文件中。我曾想过使用 recordPlot 将我的绘图保存在列表中,然后将它们打印到 pdf 设备中,但它不起作用。 我有以下错误:

replayPlot(x) 中的错误:从不同的会话加载快照

我也尝试过使用 ggplot,但这对于我的大型数据集来说会变慢。

这是一段显示我的问题的代码:

# Creating a dataframe : df
df=as.data.frame(matrix(nrow=1, ncol=10)) 
df=apply(df, 2, function(x) runif(100))

# Plotting function
par.plot=function(dat){
  plot(dat)
  p=recordPlot()
  return(p)}

#Applying the function in parallel
library("parallel")
library("foreach")
library("doParallel")

cl <- makeCluster(detectCores())
registerDoParallel(cl, cores = detectCores())

plot.lst = foreach(i = 1:nrow(df)) %dopar% {
par.plot(df[i,])
}

# Trying to get 1st plot
plot.lst[[1]]

replayPlot(x) 中的错误:从不同的会话加载快照

当我尝试获取我的绘图时,将 %dopar% 替换为 %do% 正在起作用,因为它们似乎是在相同的环境中生成的。

我知道我可以在循环中调用一个 pdf 设备来为每次迭代生成一个文件,但我想知道是否有一种方法可以在我的函数输出处为我的所有绘图获取一个文件。

或者你知道之后合并我的 pdf 文件的简单方法吗?

感谢您的帮助。 查尔斯

【问题讨论】:

    标签: r pdf plot foreach parallel-processing


    【解决方案1】:

    在我看来,您的问题可以分为两个不同的部分: 1.在th%dopar%中使用replayPlot函数,不会出现奇怪的错误 2.最后以某种方式得到1个文件

    第一个问题很容易回答。您收到此错误的原因是 R 以某种方式记住了绘图的生成位置(在操作系统级别)。您可以通过使用 Rstudio 服务器并在关闭浏览器选项卡几个小时后尝试重播一些记录的绘图来获得相同的效果。简而言之,问题在于 R 记得生成绘图的进程的 PID(虽然不知道为什么!):

    # generate a plot
    plot(iris[, 1:2]
    # record the plot
    myplot <- recordPlot()
    # check the PID
    attr(x = myplot, which = "pid")
    

    好消息是您可以通过分配当前 PID 来覆盖它:

    attr(x = myplot, which = "pid") <- Sys.getpid()
    

    所以您应该只将代码的最后一行更改为以下内容:

    pdf(file = "plot.lst.pdf"))
    graphics.off()
    lapply(plot.lst, function(x){
        attr(x = x, which = "pid") <- Sys.getpid()
        replayPlot(x)})
    graphics.off()
    

    以上部分完全解决了您的问题,但如果您对合并 PDF 文件感兴趣,请按照以下讨论进行操作: Merging existing PDF files using R

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 2018-11-29
      • 2023-01-30
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 2014-06-30
      相关资源
      最近更新 更多