gpt4 book ai didi

r - 如何从嵌套列表中提取每个 ggplot2 图

转载 作者:行者123 更新时间:2023-12-02 00:35:10 24 4
gpt4 key购买 nike

创建大型嵌套列表来跟踪使用 ggplot2 创建的绘图通常很方便。

例如,以下是我如何将一些图存储在一个大的图列表中,并包含主题和子主题的子列表。

summary_plots

  1. $人口统计
    • 人口统计$社会经济$Household_Income_Plot
    • 人口统计$社会经济$Education_Plot
    • 人口统计$Age_Plot
  2. $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,
...)

最佳答案

The code written in this answer通过 @Michael只需稍作修改即可实现此目的。

如果我们更改class checkin 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"

关于r - 如何从嵌套列表中提取每个 ggplot2 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55731855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com