2 votes

R : boucle for pour stocker plusieurs objets lm dans une liste

Je essaie de stocker plusieurs objets lm dans une seule liste. Par exemple, j'ajuste 3 régressions polynomiales simples d'ordre 1, 2, 3 et les ajoute à une liste à travers une boucle for.

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

Il doit y avoir quelque chose qui ne va pas dans ce que je fais, car la fonction predict() ne fonctionne que sur le dernier objet de la liste, c'est-à-dire lm_results[[3]]

Pour lm_results[[1]], j'obtiens une erreur et un avertissement:

predict(lm_results[[1]], Auto)

Error: variable 'poly(horsepower, i)' a été ajustée avec le type "nmatrix.2" mais le 
type "nmatrix.3" a été fourni
En plus: Warning message:
Dans Z/rep(sqrt(norm2[-1L]), each = length(x)) :
longer object length is not a multiple of shorter object length

Pour lm_results[[2]], seul l'avertissement s'affiche:

predict(lm_results[[2]], Auto)

Error: variable 'poly(horsepower, i)' a été ajustée avec le type "nmatrix.1" mais le 
type "nmatrix.3" a été fourni

La chose la plus étrange est que si je fais la même chose "manuellement" (voir ci-dessous), tout fonctionne correctement.

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) 

Avez-vous une idée de quel pourrait être le problème?

Merci d'avance.

1voto

Joe Points 2572

En utilisant lapply à la place résout le problème pour moi :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X