2010-09-22 76 views
10

R新手問題在這裏。我有一個名爲dbdata的列表。通常我使用它是這樣的:作爲R中的變量引用的字符串

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

但是,我想使這些引用動態。我需要這樣的事情:

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

我將如何參考rlm()上下文中的變量?我想也許像eval(),但沒有奏效。

謝謝!

回答

15

一種解決方案是建立公式了使用paste()並將其轉換爲一個公式:

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

現在我們可以看看f

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

,它確實是一個公式。現在,我們可以進入rlm()這是第一個參數:

> 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

可以基於與reformulate函數字符串創建公式:

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

myresults <- rlm(form, data = dbdata)