построить несколько qqplot из списка фреймов данных и экспортировать их в несколько pdf, но получил только 1 график? - PullRequest
0 голосов
/ 28 марта 2012

Я хотел бы сделать qqplots через список фреймов данных.Я написал эту функцию, но получил только 1 сюжет.Если в моем списке 3 фрейма данных, я рассчитываю получить 3 отдельных графика, но у меня только 1 график.Может кто-нибудь сказать мне, что не так с моим кодом и почему здесь не работает lapply.

myplot <-function(data,obs, cens) {
  detects <- obs[cens== 0]
  pdf(file="Desktop/qqplot.pdf")
  qqnorm(log(detects), ylab="Ln of uncensored data in ppm") 
  dev.off()
}


myplot <- lapply(dfList, function(i) myplot(i, i$obs,i$cens))

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Имя создаваемого вами pdf-файла одинаково для каждого графика, следовательно, он перезаписывает один и тот же pdf для каждого графика, и у вас остается только последний.

Вам потребуетсяменяйте имя файла pdf на каждой итерации.Вы можете попробовать что-то вроде этого:

myplot <-function(ind,dfList) {
  dat <- dfList[[ind]]
  detects <- dat$obs[dat$cens== 0]
  pdf(file=paste("Desktop/qqplot_",ind,".pdf",sep = ""))
  qqnorm(log(detects), ylab="Ln of uncensored data in ppm") 
  dev.off()
}


myplot <- lapply(1:n, myplot ,dfList = dfList)

, где n - длина вашего списка.(Непроверенный, очевидно, но это общий дух.)

1 голос
/ 28 марта 2012

Вы можете получить все сюжеты в одном документе, если это то, что вам нужно. (и избегайте переназначения myplot)

myData <- data.frame(obs = rnorm(100, 10), cens = sample(c(1, 0),
    100, replace = TRUE))

dfList <- list(myData, myData, myData)

В функции я отбросил аргумент data, так как не похоже, что он вам нужен.

myplot <- function(obs, cens) {
  detects <- obs[which(cens == 0)]
  qqnorm(log(detects), ylab = "Ln of uncensored data in ppm")
}

pdf(file = file.path("/Desktop", "qqplot.pdf"))
myAns <- lapply(dfList, function(i) myplot(obs = i$obs, cens = i$cens))
dev.off()

С этим предложением три чертежа помещаются в один документ PDF, и вы можете снова использовать функцию myplot().

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