2011-10-12 11 views
15

Invece di qualcosa come lm(bp~height+age, data=mydata) Vorrei specificare le colonne per numero, non per nome.Utilizzo di numeri di colonna non di nomi in lm()

ho cercato lm(mydata[[1]]~mydata[[2]]+mydata[[3]]) ma il problema con questo è che, nel modello adattato, i coefficienti sono chiamati mydata[[2]], mydata[[3]] ecc, mentre mi piacerebbe loro di avere i nomi delle colonne reali.

forse questo è un caso di non avere la vostra torta e mangiare, ma se gli esperti potrebbero consigliare se questo è possibile sarei grato

+1

È possibile ottenere risposte migliori se si fornisce un contesto leggermente più ampio per ciò che si sta tentando di fare: "qual è il problema che si sta tentando di risolvere"? –

+0

Grazie per il tuo commento. Ho un gran numero di colonne in un dataframe. Sto adattando un modello lineare usando un sottoinsieme di questi, usando varie tecniche inclusa la selezione graduale. Sarà utile se posso riferirmi alle colonne per numero quando chiamo lm() ma se possibile vorrei che il modello mostrasse i nomi delle colonne. –

+1

Vorrei incollare insieme una formula basata sui nomi, come in: http://stackoverflow.com/questions/6877534/understanding-lm-and-environment/6878461#6878461 –

risposta

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

Invece di c(2, 3) è possibile utilizzare il numero di indici che si desidera (non è necessario per il ciclo).

+1

manca una virgola alla fine della terza riga? –

+0

Grazie, @ Ben. Inoltre, forse usare 'as.formula' sarebbe più robusto, anche se non necessario per' lm() '(ma per altri modelli). – TMS

+0

Grazie. Questo enuncia ciò che Ben Bolker ha suggerito in precedenza, e funziona perfettamente. –

Problemi correlati