R: цикл for для хранения нескольких объектов lm в списке - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь сохранить несколько объектов 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) 

Есть идеи, в чем может быть проблема?

Заранее спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

Использование lapply вместо этого решает проблему для меня:

lm_results <- lapply(1:3, function(x) lm(mpg ~ poly(horsepower, x), data = Auto))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...