首页 > 解决方案 > 如何在 R 中为多个绘图创建多个 pdf?

问题描述

对于每个种子,我有两个地块。对于三个种子,所有六个地块都保存在一个 pdf 中。但我希望它们在每个种子的单独 pdf 中。例如,对于第一个种子,我想要两个 pdf,一个用于sample[,1],另一个用于sample[,2]. 其余的种子也是如此。

pdf(file = "example plots.pdf")
library(LearnBayes)
seeds <- c(314159,523626,626789)
for (seed in seeds) {
  set.seed(seed)
  x <- c(11, 5, 2, -5, 7, 2, -11, 9, -5, -5, -4, 17, 2, -10, -11, -10,
         -4, 2, 1, 13)
  a <- 0.1
  b <- 0.1
  c <- 0
  d <- 100^2
  M <- 1e3
  sample <- array(NA, dim=c(M,2))
  mu <- mean(x)
  sig2 <- var(x)
  for( m in 1:M ){
    mu <- rnorm(1, (length(x) + 1/d)^(-1) * (sum(x) + c/d),
                sqrt( sig2/(length(x) + 1/d) ))
    sig2 <- rigamma(1, .5*length(x)+a+.5,
                    .5*sum( (x-mu)^2 ) + 1/(2*d)*(mu-c)^2 + b )
    sample[m,] <- c(mu,sig2)
  }

  par(mfrow=c(1,2))
  plot( density( sample[,1] ), main=paste("plot_1 for seed", seed))
  plot( density( sample[,2] ), main = paste("plot_2 for seed", seed))
  setwd("C:/Users/mnudd/Desktop/StackExchange")
  save(sample,file =paste0("hrs_sample_4Q_", seed, ".RData"))

}
dev.off()

标签: rpdfplot

解决方案


基本上你可以将例程包装成一个函数并运行一个sapply循环。

seeds <- c(314159, 523626, 626789)

FUN <- function(x) {
  pdf(paste0("file", x, ".pdf"))  # initialize .pdf device
  set.seed(x)  # use seed from `sapply` loop
  # do stuff and plot.............................
  samp <- replicate(2, rnorm(1e3), simplify=FALSE)
  op <- par(mfrow=c(1, 2))
  lapply(samp, plot)
  par(op)
  # ..............................................
  dev.off()  # close .pdf device
  }
sapply(seeds, FUN)

注意:getwd()除非您指定位置,否则PDF 将保存到您的文件夹中pdf(paste0("<LOCATION>/file", x, ".pdf"))


推荐阅读