Это классическая причина использовать один список объектов с аналогичной структурой, а не множество отдельных объектов, которые затопляют вашу глобальную среду и требуют обширного обслуживания и поиска / отзыва. Когда объекты сохраняются в списке, вы можете выполнять согласованные операции с такими элементами, как отдельные qplots или один большой qplot.
Ниже приведены эквивалентные вызовы для сохранения всех фреймов данных в одном именованном списке, но, как @ Грегор советует : избегайте, чтобы куча data.frames отсутствовала в списке .. . не ждите, пока у вас не появится набор data.frames
, чтобы добавить их в список. Начните со списка.
df_list <- Filter(is.data.frame, eapply(.GlobalEnv, identity))
df_list <- Filter(is.data.frame, mget(x=ls(), envir=.GlobalEnv))
Оттуда используйте lapply
для отдельных графиков или объедините все кадры данных в один кадр данных с полем индикатора и запустите фасеты.
# INDIVIDUAL PLOTS ------------------------------------------------
lapply(df_list, function(df) qplot(df$z, df$x, geom='smooth'))
# SINGLE PLOT -----------------------------------------------------
# ADD INDICATOR COLUMN IN EACH DF
df_list <- Map(function(df, nm) transform(df, a_name = nm), df_list, names(df_list))
# CONCATENATE ALL DF ELEMENTS
final_df <- do.call(rbind, unname(df_list))
# QPLOT WITH FACETS
with(final_df, qplot(z, x, geom='smooth', facets= ~ num))
Для демонстрации со случайными, посеянными данными девяти кадров данных:
set.seed(662019)
a_names <- paste0("a", 1:9)
# BUILD DF LIST EACH WITH INDICATOR COLUMN
df_list <- lapply(a_names, function(i) data.frame(a_name = i, x = runif(100), z = runif(100)))
# CONCATENATE ALL DF ELEMENTS
final_df <- do.call(rbind, unname(df_list))
# QPLOT WITH FACETS
with(final_df, qplot(z, x, geom='smooth', facets= ~ a_name))
