Я пытаюсь создать графики сравнения данных до и после обработки данных для нескольких столбцов в моем наборе данных с помощью for l oop. В конце концов, я хочу сохранить все сравнительные графики в один файл pdf. Во-первых, я создаю график раньше, манипулирую данными, генерирую график после и хочу, чтобы они располагались бок о бок через ggarrange (я также пробовал grid.arrange из gridExtra, но это не решает проблему). Однако я получаю идентичные графики ПОСЛЕ обработки данных (хотя названия разные).
Вот воспроизводимый пример:
library(rlist)
library(ggplot2)
library(ggpubr)
head(iris)
plot_before <- list()
plot_after <- list()
plots <- list()
for (i in 1:4){
p <- ggplot(iris,aes(iris[,i])) + geom_histogram()+ggtitle(paste0(i,"_pre"))
print(p)
plot_before <- list.append(plot_before,p)
#do something with your data
iris[,i] <- 3*iris[,i]
p2 <- ggplot(iris,aes(iris[,i])) + geom_histogram()+ggtitle(paste0(i,"_post"))
print(p2)
plot_after <- list.append(plot_after, p2)
q <- ggarrange(p,p2) #here, p is already linked to modified data
print(q)
plots <- list.append(plots, q)
}
#try to access plots from lists
for (i in 1:4){
print(plot_before[[i]])
print(plot_after[[i]])
print(plots[[i]])
}
Я полагаю, это имеет какое-то отношение к тому, что ggplot создает «только» графический объект, связанный с данными, поэтому в тот момент, когда я напечатаю его снова , он снова обращается к данным и извлекает обработанные данные вместо получения предыдущего «снимка». Сохранение графиков в отдельные списки также не помогает, они также «связаны» с обрабатываемыми данными.
Есть ли способ создать постоянный объект ggplot вместо того, чтобы связывать его с данными?
Можно, конечно, создать новые столбцы с измененными данными и ссылаться на них или создать совершенно новый фрейм данных, но я бы хотел избежать дублирования данных.