Как создать несколько PDF для нескольких сюжет в R? - PullRequest
0 голосов
/ 16 января 2020

Для каждого семени у меня есть два участка. Для трех семян все шесть участков сохраняются в одном файле 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()

Ответы [ 2 ]

1 голос
/ 16 января 2020

Вот ваш код с некоторыми изменениями (помеченными комментариями), которые сохранят графики так, как вы хотите. Проблема с предыдущим кодом заключается в том, что вы перезаписывали свой PDF-график, так как он был назван только один раз как pdf(file = "example plots.pdf"). Я изменил код, чтобы вы сохранили 3 PDF-файла с разными именами.

#Moved wd outside the loop
setwd("C:/Users/mnudd/Desktop/StackExchange")
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))
  #Moved pdf inside the loop and modified the name of the saved file
  pdf(file = paste0("example_plots_", seed,".pdf"))
  plot( density( sample[,1] ), main=paste("plot_1 for seed", seed))
  plot( density( sample[,2] ), main = paste("plot_2 for seed", seed))
  #Moved dev.off inside the loop
  dev.off()

  save(sample,file =paste0("hrs_sample_4Q_", seed, ".RData"))

}
1 голос
/ 16 января 2020

Как правило, вы можете заключить процедуру в функцию и запустить sapply l oop.

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)

Примечание: PDF-файлы будут сохранены в вашем getwd(), если только Вы указываете местоположение pdf(paste0("<LOCATION>/file", x, ".pdf")).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...