创建大型嵌套列表以跟踪用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所需的结果相当于创建如下列表:
list('Demographics.Socioeconomic.Income' = generic_plot,
'Demographics.Socioeconomic.Education' = generic_plot,
...)发布于 2019-04-17 17:23:07
The code written in this answer by @Michael将完成这一任务,只需稍作修改。
如果我们将morelists <- ...行中的morelists <- ...检查更改为仅在类包含'list'但而非是否包含类'gg'的情况下扁平化,那么它将不会平铺这些情节,并将返回一个平面列表。
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"https://stackoverflow.com/questions/55731855
复制相似问题