У меня есть серия больших фреймов данных, которые выглядят так:
Year Variable Class
1999 0.4504 a
1999 0.4244 a
1999 0.8980 b
1999 0.8901 b
2000 0.2552 a
2000 0.6504 a
2000 0.7830 b
2000 0.2030 b
... ... ...
... ... ...
2018 0.6520 a
2018 0.1403 a
2018 0.4502 b
2018 0.1240 b
С 15 различными классами и минимум 500 наблюдений за каждый год и класс. Я хочу создать подмножество для каждого года и класса (то есть 20 лет * 15 классов = 300 подмножеств) и построить график Q-Q, чтобы посмотреть на их распределение, чтобы увидеть, насколько они отличаются от нормальных.
Проблема в том, что даже если я могу создать подмножества с помощью цикла, я не знаю, как сохранить графики, чтобы потом их просматривать.
Идея примерно такая:
library(data.table)
library(ggpubr)
dataframe_list <- list.files(path="B:/Data/", pattern=".csv", full.names=TRUE)
years <- c(1999:2018)
for (i in 1:13){
db <- fread(dataframe_list[i])
for (j in 1:length(years)){
db_year <- subset(db, db$Year==years[j])
class <- levels(as.factor(db_year$Class))
for (k in 1:length(class)){
db_year_class <- subset(db_year, db_year$Class==class[k])
}
}
}
Сделать график в третьем цикле, используя:
ggqqplot(db_year_class$Variable)
и сохраняйте его каким-либо образом, пока у меня все они не будут в конце цикла. Поскольку их не менее 300 для каждого кадра данных в списке, хранить графики в одном файле для каждого кадра данных было бы замечательно.
Редактировать Хорошо, вот как я его адаптировал:
library(data.table)
library(ggpubr)
dataframe_list <- list.files(path="B:/Data/", pattern=".csv", full.names=TRUE)
df <- c(A, B, C, D, E, F, G, H, I, J, K, L, M)
years <- c(1999:2018)
plot_list <- list()
for (i in 1:13){
db <- fread(dataframe_list[i])
for (j in 1:length(years)){
db_year <- subset(db, db$Year==years[j])
class <- levels(as.factor(db_year$Class))
for (k in 1:length(class)){
db_year_class <- subset(db_year, db_year$Class==class[k])
plot_list[[k]] <- ggqqplot(db_year_class$Variable)+ggtitle(paste0("Code_0_", df[i], "_", years[j], "_", class[k]))
outfiles <- paste0("B:/Results/Plot/Code_0_", df[i], "_", years[j], ".pdf")
pdf(file=outfiles, onefile = TRUE)
for(z in seq_along(list)) {
print(plot_list[[z]])
}
dev.off()
}
}
}
Результатом является pdf для каждого года, который не очень удобен, но в противном случае использование объекта списка не сработает: список был бы перезаписан в конце цикла.