2011-10-12 7 views
15

lugar de algo como lm(bp~height+age, data=mydata) me gustaría especificar las columnas por número, no el nombre.no los números de columna utilizando nombres en lm()

me trataron lm(mydata[[1]]~mydata[[2]]+mydata[[3]]) pero el problema con esto es que, en el modelo ajustado, los coeficientes se nombran mydata[[2]], mydata[[3]] etc, mientras que me gustaría que tener los nombres de las columnas reales.

Tal vez este es un caso de no tener su pastel y comerlo, pero si los expertos pueden aconsejar si esto es posible me gustaría que el

+1

Es posible obtener mejores respuestas si se le da un contexto un poco más grande de lo que estamos tratando de hacer: "¿cuál es el problema que está tratando de resolver"? –

+0

Gracias por su comentario. Tengo una gran cantidad de columnas en un marco de datos. Estoy ajustando un modelo lineal usando un subconjunto de estos, usando varias técnicas, incluida la selección por pasos. Será conveniente si puedo referirme a las columnas por número cuando llamo a lm() pero, de ser posible, me gustaría que el modelo muestre los nombres de las columnas. –

+1

Me pegar juntos una fórmula basada en los nombres, como en: http://stackoverflow.com/questions/6877534/understanding-lm-and-environment/6878461#6878461 –

Respuesta

19
lm(
    as.formula(paste(colnames(mydata)[1], "~", 
     paste(colnames(mydata)[c(2, 3)], collapse = "+"), 
     sep = "" 
    )), 
    data=mydata 
) 

En lugar de c(2, 3) puede utilizar el número de índices que desea (no es necesario para el bucle)

+1

¿falta una coma al final de la tercera línea? –

+0

Gracias, @Ben. Además, quizás usar 'as.formula' sería más robusto, aunque no es necesario para' lm() '(pero para otros modelos sí). – TMS

+0

Gracias. Esto explica lo que Ben Bolker sugirió antes, y funciona perfectamente. –

Cuestiones relacionadas