【问题标题】:R: for loop to store multiple lm objects in a listR:for循环将多个lm对象存储在列表中
【发布时间】:2019-04-30 12:29:43
【问题描述】:

我正在尝试将多个 lm 对象存储在一个列表中。例如,我拟合了 3 个 1、2、3 阶的简单多项式回归,并通过 for 循环将它们添加到列表中。

lm_results <- list() 
for (i in 1:3){
  lm_results[[i]] <- lm(mpg~poly(horsepower, i), 
                        data=Auto)
}

我所做的一定有问题,因为predict() 函数仅适用于列表的最后一个对象,即lm_results[[3]]

对于lm_results[[1]],我收到一条错误消息和一条警告消息:

predict(lm_results[[1]], Auto)

Error: variable 'poly(horsepower, i)' was fitted with type "nmatrix.2" but 
type "nmatrix.3" was supplied
In addition: Warning message:
In Z/rep(sqrt(norm2[-1L]), each = length(x)) :
longer object length is not a multiple of shorter object length

对于lm_results[[2]],仅显示警告消息:

predict(lm_results[[2]], Auto)

Error: variable 'poly(horsepower, i)' was fitted with type "nmatrix.1" but 
type "nmatrix.3" was supplied 

最奇怪的是,如果我“手动”执行相同的操作(见下文),一切正常。

lm_results <- list()
lm_results[[1]] <- lm(mpg~poly(horsepower, 1), 
                  data=Auto)
lm_results[[2]] <- lm(mpg~poly(horsepower, 2), 
                  data=Auto)
lm_results[[3]] <- lm(mpg~poly(horsepower, 3), 
                  data=Auto) 

知道问题可能是什么吗?

提前致谢。

【问题讨论】:

    标签: r list for-loop lm


    【解决方案1】:

    改用lapply 为我解决了这个问题:

    lm_results <- lapply(1:3, function(x) lm(mpg ~ poly(horsepower, x), data = Auto))
    

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2017-01-15
      • 2020-02-17
      • 2020-12-01
      • 2017-09-08
      • 1970-01-01
      • 2018-05-13
      相关资源
      最近更新 更多