制作大型嵌套列表以跟踪使用创建的图通常很方便ggplot2。
例如,这是我如何在大量的图列表中存储少量图,以及主题和子主题的子列表。
summary_plots
$Demographics
Demographics$Socioeconomic$Household_Income_PlotDemographics$Socioeconomic$Education_PlotDemographics$Age_Plot$Product_Usage
Purchase_Frequency_Plot如何ggplot2从整个列表中提取所有绘图对象?我希望能够创建一个“平面”的单层列表,其中包含原始列表中包含的所有图。
这是一个简单的示例列表:
generic_plot <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg))
summary_plots <- list()
summary_plots$Demographics$Socioeconomic$Income <- generic_plot
summary_plots$Demographics$Socioeconomic$Education <- generic_plot
summary_plots$Demographics$Age <- generic_plot
summary_plots$Product_Usage$Purchase_Frequency <- generic_plot
Run Code Online (Sandbox Code Playgroud)
所需的结果将等同于创建一个如下所示的列表:
list('Demographics.Socioeconomic.Income' = generic_plot,
'Demographics.Socioeconomic.Education' = generic_plot,
...)
Run Code Online (Sandbox Code Playgroud)
如果我们改变了class在检查 morelists <- ...线路只有拉平如果类包含'list'但不包含类'gg',那么就不会压平的地块,并返回ggplots的平面列表。
flattenlist <- function(x){
morelists <- sapply(x, function(xprime) {
'list' %in% class(xprime) & !('gg' %in% class(xprime))
})
out <- c(x[!morelists], unlist(x[morelists], recursive=FALSE))
if(sum(morelists)){
Recall(out)
}else{
return(out)
}
}
plts <- flattenlist(summary_plots)
names(plts)
[1] "Demographics.Age"
[2] "Product_Usage.Purchase_Frequency"
[3] "Demographics.Socioeconomic.Income"
[4] "Demographics.Socioeconomic.Education"
lapply(plts, class)
$Demographics.Age
[1] "gg" "ggplot"
$Product_Usage.Purchase_Frequency
[1] "gg" "ggplot"
$Demographics.Socioeconomic.Income
[1] "gg" "ggplot"
$Demographics.Socioeconomic.Education
[1] "gg" "ggplot"
Run Code Online (Sandbox Code Playgroud)