【问题标题】:R nested loop ggplot, need storage object with multiple dimensionsR嵌套循环ggplot,需要多维存储对象
【发布时间】:2017-11-01 16:19:21
【问题描述】:

我想写一个嵌套循环到:

  • 生成多个 ggplots
  • 运行回归

我使用以下代码:

#create alternative data set
mtcars1 <- filter(mtcars, disp >= 100)

#create data, x variable, and y variable lists
data_list <- c('mtcars', 'mtcars_1')
x_list <- c('mpg', 'cyl', 'disp')
y_list <- c('hp', 'drat', 'wt')

#create empty lists for plots and regressions generated by loop
plots <- list()
regressions <- list()

#loop
for (i in length(data_list)){
  for (j in 1:length(x_list)) {
    for (k in 1:length(y_list)) {
      plots[[i, j, k]] <- ggplot(data_list[i], aes_string(x = x_list[j], y = y_list[k])) + 
        geom_point(size = 2) + 
        xlab(x_list[j]) + 
        ylab(y_list[k])

      regressions[[i, j, k]] <- lm(y_list[k] ~ x_list[j], data = data_list[i])

    }
  }
}

两个问题:

  1. ggplot 数据输入是否有等效的“aes_string”?

  2. 我需要某种类型的对象,它存在于多个维度中并且可以容纳多种类型的对象。列表可以包含任何类型的对象,但是是一维的。数组可以有多个维度,但只能保存单个值。

也许我可以生成多个列表?

【问题讨论】:

    标签: arrays r list loops ggplot2


    【解决方案1】:

    实际上,如果设置正确,您可以在矩阵中包含列表。

    plots <- array(list(), dim = c(2, 2, 2)) # must be initialized with list type
    ggp <- ggplot(mtcars, aes(mpg, gear)) + geom_point()
    plots[[1, 1, 1]] <- ggp # double brackets are important
    plots[[1, 1, 1]]
    

    【讨论】:

      【解决方案2】:

      我喜欢 dash2 的答案作为替代方案,您可以通过嵌套向列表添加维度。下面是一个二维列表,即 2 个列表的列表。

      library(ggplot2)
      
      plot1<-ggplot(mtcars,aes(x=mpg,y=cyl))+geom_point()
      lm1<-lm(mpg~as.factor(cyl),data=mtcars)
      plot2<-ggplot(mtcars,aes(x=mpg,y=disp))+geom_point()
      lm2<-lm(mpg~as.factor(disp),data=mtcars)
      
      myList<-list("plots"=list("plot1"=plot1,"plot2"=plot2),"models"=list("lm1"=lm1,"lm2"=lm2))
      

      通过在列表中嵌套列表,您可以拥有任意多个维度。

      【讨论】:

        猜你喜欢
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 2020-02-17
        • 2018-03-23
        • 1970-01-01
        相关资源
        最近更新 更多