首页 > 解决方案 > 将环境中的所有 ggplot2 图存储在列表中

问题描述

我需要从一个创建近 10000 个情节的脚本中更改所有标签(标题/字幕)——所有这些都不同。我不想更改脚本代码,而是想遍历所有图并添加一个新labs函数。这样一来,原作没有任何改变。为此,我需要将所有 ggplot2 对象放入列表中。

我的问题是:如何ggplot2将环境中的所有对象存储到一个列表中?

下面的代码应该创建 11 个ggplot2图并将它们存储在环境中(想要做相反的事情 .. 将它们从环境中放入一个列表中)。

library(tidyverse)

# Make a lot of ggplots using mtcars

all_plots <- list()

all_plots <- map(names(mtcars), 
    possibly(function(x){
  mtcars %>% 
    ggplot(aes(mpg, x))+
    geom_point()
}, NULL)) %>% 
  set_names(names(mtcars))

# function to add all ggplots to the environemnt
list_environment <- function(x) {
  if(is.list(x)) { 
    list2env(x, envir = .GlobalEnv)
    lapply(x, test)
  }
}

list_environment(all_plots)

ls()

标签: rlistggplot2environment

解决方案


首先收集ggplot环境中所有对象的名称。您可以遍历ls()并检查每个对象是否在其类中具有“ggplot”(这适用于您的示例):

my_ggplot_names=ls()[which(sapply(ls(),function(x) class(get(x))[2]=="ggplot"))]

然后很容易使用mget将具有这些名称的所有对象收集到一个列表中:

my_listed_ggplots=mget(my_ggplot_names)

推荐阅读