R :сохранение графиков ggplot2 в списке

Я пишу код R, который позволяет пользователям выбирать столбцы из данных и строить гистограммы для каждого из них. Следовательно, я использую цикл for для создания необходимого количества графиков с помощью библиотеки ggplot2 и сохранения их в одном списке. Но проблема, с которой я сталкиваюсь, заключается в том, что на каждой итерации цикла for все объекты в списке сохраняют один и тот же график. Таким образом, конечный результат состоит из сетки гистограмм, помеченных по-разному, но отображающих один и тот же (последний )столбец.

Я понимаю, что этот вопрос довольно старый, и я нашел ответы на переименование графиков ggplot2 в цикле for иhttps://stat.ethz.ch/pipermail/r-help/2008-February/154438.htmlбыть полезной отправной точкой.

Я использовал стандартный набор данных Swiss Fertility, доступный в R, для создания графиков. Вот код:-

data_ <- swiss
data_ <- na.omit(data_)

u <- c(2, 3, 4, 5, 6)
plotData <- data_[,u]
bw <- 5
plotType <- 'probability'

library(ggplot2)
library(gridExtra)

histogramList <- vector('list', length(u))

if(plotType=='probability')
{
 for(i in 1:length(u))
 {
   indexDataFrame <- data.frame(plotData[,i])
   probabilityHistogram <- ggplot(indexDataFrame, aes(x=indexDataFrame[,1]))
   histogramList[[i]] <-  probabilityHistogram + geom_histogram(aes(y=..density..),     binwidth=bw, colour='black', fill='skyblue') + geom_density() + scale_x_continuous(names(plotData)[i]) + opts(legend.position='none')
 }
} else
if(plotType=='frequency')
{
 for(i in 1:length(u))
 {
   indexDataFrame <- data.frame(plotData[,i])
   probabilityHistogram <- ggplot(indexDataFrame, aes(x=indexDataFrame[,1]))
   histogramList[[i]] <- probabilityHistogram + geom_histogram(aes(y=..count..), binwidth=bw, colour='black', fill='skyblue') + geom_density() + scale_x_continuous(names(plotData)[i]) + opts(legend.position='none')
 }
}

arg_list <- c(histogramList, list(nrow=3, ncol=2))
#jpeg('histogram', width=1024, height=968)
do.call(grid.arrange, arg_list)
#graphics.off()

Прошу прощения, если я пропустил очевидный ответ на вопрос на этом форуме, и буду признателен, если вы направите меня к нему. Я надеюсь, что мое объяснение понятно, а если нет, пожалуйста, дайте мне знать о необходимых разъяснениях.

Спасибо!

14
задан Community 23 May 2017 в 12:17
поделиться