2010-09-22 18 views
10

R domanda newbie qui. Ho una lista chiamata dbdata. Normalmente lo uso in questo modo:Stringhe come riferimenti variabili in R

myresults <- rlm(V001 ~ V002+V003, data=dbdata) 

Tuttavia, mi piacerebbe rendere questi riferimenti dinamici. Ho bisogno di avere qualcosa di simile:

var1 <- "V001" 
var2 <- "V002" 
var3 <- "V003" 
myresults <- rlm(var1 ~ var2+var3, data=dbdata) 

Come potrei fare riferimento alle variabili nel contesto rlm()? Ho pensato forse qualcosa come eval(), ma non ha funzionato.

Grazie!

risposta

15

Una soluzione è quella di costruire la formula utilizzando paste() e convertirlo in una formula:

> ## your example plus some dummy data 
> var1 <- "V001" 
> var2 <- "V002" 
> var3 <- "V003" 
> dat <- data.frame(V001 = runif(10), V002 = runif(10), V003 = runif(10)) 
> f <- formula(paste(var1, "~", var2, "+", var3)) 

Ora possiamo guardare f

> f 
V001 ~ V002 + V003 
> class(f) 
[1] "formula" 

ed è davvero una formula. Ora possiamo passare questo in rlm() come primo argomento:

> require(MASS) 
> mod <- rlm(f, data = dat) 
> mod 
Call: 
rlm(formula = f, data = dat) 
Converged in 8 iterations 

Coefficients: 
(Intercept)  V002  V003 
    0.2725538 -0.1281576 0.1617250 

Degrees of freedom: 10 total; 7 residual 
Scale estimate: 0.251 

HTH

2

È possibile creare formule in base a stringhe con la funzione reformulate:

form <- reformulate(c(var2, var3), response = var1) 
# V001 ~ V002 + V003 

myresults <- rlm(form, data = dbdata)