Я пытаюсь использовать следующий код для построения гистограмм нескольких столбцов частотных данных.
colsToPlot <- c(61,63,65,67,69,71,73,75)
for (i in 1:length(colsToPlot)){
Outcome = ResearcherData[,(colsToPlot[i])]
out[[i]] <- ResearcherData %>%
filter(is.na(Outcome) == FALSE,
Outcome!= "")%>%
ggplot(aes(x= Outcome)) + geom_bar(stat = "count", fill = "#1E4D2B" ) +
scale_x_discrete(drop=FALSE) +
theme_bw() + theme(
axis.title.x = element_blank(), axis.ticks.x = element_blank(),
axis.title.y = element_blank(),
legend.position= "none"
)+ ggtitle(colnames(ResearcherData[,i]))+
theme(plot.title = element_text(hjust = 0.5))
}
grid.arrange(out[[1]],out[[2]],out[[3]],out[[4]],out[[5]],out[[6]],out[[7]],out[[8]], ncol=2)
Однако он просто дает мне 8 одинаковых гистограмм. Есть идеи, что может быть не так?
Рассмотрим метод lapply вместо цикла for — stackoverflow.com/a/31994539/10276092





Как указано в комментариях, вы отправляете неправильную переменную в ggplot(). И подход lapply() будет более эффективным. Но если вы хотите увидеть, как заставить это работать с помощью цикла for, вот как это сделать:
library(ggplot2)
library(gridExtra)
# Sample data
set.seed(1)
ResearcherData <- data.frame(matrix(sample(1:100, 1500, replace = TRUE),
nrow = 100, ncol = 15))
# Columns to plot
colsToPlot <- c(1, 3, 5, 7, 9, 11, 13, 15)
# Create empty list to store plot results
out <- list()
# Loop through colsToPlot and add result to out
for (i in seq_along(colsToPlot)) {
col_ID <- colsToPlot[i]
col_name <- colnames(ResearcherData)[col_ID]
Outcome <- ResearcherData[[col_ID]]
p <- ggplot(data.frame(Outcome), aes(x = Outcome)) +
geom_histogram(binwidth = 10, fill = "#1E4D2B", color = "white") +
theme_bw() +
theme(axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
axis.title.y = element_blank(),
legend.position = "none") +
ggtitle(col_name) +
theme(plot.title = element_text(hjust = 0.5))
out[[i]] <- p
}
# Plot
do.call(grid.arrange, c(out, ncol = 2))
Используя lapply:
plot_data <- function(data, col) {
dplyr::select(data, all_of(col)) |>
ggplot(aes_string(x = col)) +
geom_histogram(binwidth = 10, fill = "#1E4D2B", color = "white") +
theme_bw() +
theme(axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
axis.title.y = element_blank(),
legend.position = "none") +
ggtitle(col) +
theme(plot.title = element_text(hjust = 0.5))
}
cowplot::plot_grid(
plotlist=lapply(colnames(ResearcherData)[colsToPlot],
FUN=plot_data, data=ResearcherData),
ncol=2)
set.seed(1)
ResearcherData <- data.frame(matrix(sample(1:100, 1500, replace = TRUE),
nrow = 100, ncol = 15))
# Columns to plot
colsToPlot <- c(1, 3, 5, 7, 9, 11, 13, 15)
Я думаю, ты хочешь
out[[i]]<- Outcome %>%вместо<- ResearcherData %>%