【问题标题】:for loop in R - generate different graphicsR中的for循环 - 生成不同的图形
【发布时间】:2021-04-17 22:34:57
【问题描述】:

如果我有一组不同样本 (x) 和固定 y 的数据,例如:

> x1 <- c(5,6,7,8)
> x2 <- c(9,7.8,6,8)
> x3 <- c(7,3,5,1)x 
> y <- c(20,21,20,50)

如果我想尝试绘制这些数据,例如 (x1 ~ y)、(x2 ~ y)、(x3 ~ y)

> x_data <- data_frame(x1, x2, x3)
> 
> for (i in seq_along(x_data)) {   
>   model <- lm(x_data[i] ~ y)
>   plot(model) 
> }

但是,这不起作用,我收到以下错误:

Error in model.frame.default(formula = x_data[i] ~ y, drop.unused.levels = TRUE) : 
variable lengths differ (found for 'x_data')

我正在尝试描绘它们以检查是否存在对值的依赖关系。

【问题讨论】:

    标签: r for-loop plot graph lm


    【解决方案1】:

    我们可以用paste创建公式

    par(mfrow = c(3, 4))
    for (i in seq_along(x_data)) {   
        model <- lm(as.formula(paste(names(x_data)[i],  "~ y")), data = x_data)
          plot(model) 
         }
    


    reformulate

    par(mfrow = c(3, 4))
    for (i in seq_along(x_data)) {   
        model <- lm(reformulate("y", response = names(x_data)[i]), data = x_data)
          plot(model) 
         }
    

    【讨论】:

    • 非常感谢您的及时回复!两个答案都很完美!使用其中一个有什么优势吗?
    • @Harr1ls reformulate 更紧凑,但paste 可能更高效
    【解决方案2】:

    考虑reformulate 并将所有向量绑定到一个数据框中以与lmdata 参数一起使用:

    model_data <- data.frame(y, x1, x2, x3)
    
    # ITERATE ACROSS COLUMN NAMES, IGNORING FIRST
    for (x in colnames(model_data[-1])) {   
      model <- lm(reformulate("y", response=x), data=model_data)
      plot(model) 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2014-07-17
      • 1970-01-01
      • 2021-08-07
      • 2021-12-24
      相关资源
      最近更新 更多