2010-09-22 14 views
10

R pytanie newbie tutaj. Mam listę o nazwie dbdata. Zwykle używam go w następujący sposób:Ciągi jako zmienne odniesienia w R

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

Chciałbym jednak, aby te odniesienia były dynamiczne. Muszę mieć coś takiego:

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

Jak będę odwoływać się do zmiennych w kontekście rlm()? Myślałem, że może coś w rodzaju eval(), ale to nie zadziałało.

Dzięki!

Odpowiedz

15

Jednym z rozwiązań jest stworzenie formuły przy użyciu paste() i przekształcić ją w formule:

> ## 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)) 

Teraz możemy spojrzeć na f

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

i to naprawdę jest formuła. Możemy teraz przejść do rlm() to jako pierwszy argument:

> 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

Można tworzyć formuły oparte na łańcuchach z reformulate funkcję:

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

myresults <- rlm(form, data = dbdata) 
Powiązane problemy