Вот один из способов сделать это - перебрать индексы столбцов и создать графики один за другим, добавив их в список и записав каждый в файл:
library(ggplot2)
# create some data to plot
df1 <- iris[, sapply(iris, is.numeric)]
df2 <- iris[sample(1:nrow(iris)), sapply(iris, is.numeric)]
# a list to catch each plot object
plot_list <- vector(mode="list", length=ncol(df1))
for (idx in seq_along(df1)){
plot_list[[idx]] <- ggplot2::qplot(df1[[idx]], df2[[idx]]) +
labs(title=names(df1)[idx])
ggsave(filename=paste0(names(df1)[idx], ".pdf"), plot=plot_list[[idx]])
}
Как вы предлагаете ввопрос, вы также можете использовать s/lapply()
с анонимной функцией, например, вот так (хотя здесь мы не храним графики, просто записываем каждый на диск):
lapply(seq_along(df1), function(idx){
the_plot <- ggplot2::qplot(df1[[id]], df2[[idx]]) + labs(title=names(df1)[idx])
ggsave(filename=paste0(names(df1)[idx], ".pdf"), plot=the_plot)
})
Если вы хотите сохранитьсписок графиков (как в примере for
-loop), просто присвойте lapply()
переменной (например, plot_list
) и добавьте строку наподобие return(the_plot)
перед закрытием функции.
Естьтонны способов, которыми вы могли бы изменить / адаптировать этот подход, в зависимости от ваших целей.
Надеюсь, это поможет ~~
ps если возможно, столбцы будут не в том же порядке, лучше перебрать столбец names вместо индексов столбцов (т.е. используйте for (colname in names(df1)){...
вместо for (idx in seq_along(df1)){...
).Вы можете использовать один и тот же синтаксис подмножества [[
с именами и индексами.