在 R 中使用赋值函数时,如何将图形对象存储到列表中?

问题描述

我创建了以下函数,它接受一个数据框并输出多个图:

Boxplot_depend_vs_independ <- function(df_train) {
  
  train_int_names <- df_train %>% select_if(is.numeric)
  
  int_names <- names(train_int_names)
  
   for (i in int_names) {       
     
    assign(paste0("var_",i),ggplot(train,aes_string(x = train$target,y = i)) + 
            geom_Boxplot(color = 'steelblue',outlier.color = 'firebrick',outlier.alpha = 0.35) +
            labs(title = paste0(i,' vs target'),y = i,x= 'target') +
            theme_minimal() + 
            theme(
              plot.title = element_text(hjust = 0.45),panel.grid.major.y =  element_line(color = "grey",linetype = "dashed"),panel.grid.major.x = element_blank(),panel.grid.minor.y = element_blank(),panel.grid.minor.x = element_blank(),axis.ticks.x = element_line(color = "grey")
            )
           )
   }
  

  myGlist <- list(var_YOJ) # Example of one grob in a list

  gridExtra::grid.arrange(grobs = myGlist,nrow=4)
}

如何在创建图形对象时将它们放在列表中,以便我可以将它们最后传递给 grid.arrange 函数? assign 函数将它们放入一个变量中,但如何让循环将其放入一个列表中?

解决方法

不是在全局环境中使用 assign 创建对象,而是在顶部初始化一个 list 'myGlist',然后将每次迭代的输出分配给它

boxplot_depend_vs_independ <- function(df_train) {

  train_int_names <- df_train %>% 
            select_if(is.numeric)

  int_names <- names(train_int_names)
   myGlist <- vector('list',length(int_names))
   names(myGlist) <- int_names
  for (i in int_names) {       
 
   myGlist[[i]] <- 
       ggplot(train,aes_string(x = train$target,y = i)) + 
        geom_boxplot(color = 'steelblue',outlier.color = 'firebrick',outlier.alpha = 0.35) +
        labs(title = paste0(i,' vs target'),y = i,x= 'target') +
        theme_minimal() + 
        theme(
          plot.title = element_text(hjust = 0.45),panel.grid.major.y =  element_line(color = "grey",linetype = "dashed"),panel.grid.major.x = element_blank(),panel.grid.minor.y = element_blank(),panel.grid.minor.x = element_blank(),axis.ticks.x = element_line(color = "grey")
        )
       
      }




    gridExtra::grid.arrange(grobs = myGlist,nrow=4)
   }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...