Строки как ссылки на переменные в R - PullRequest
10 голосов
/ 22 сентября 2010

R вопрос новичка здесь. У меня есть список под названием dbdata. Обычно я использую это так:

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

Однако я хотел бы сделать эти ссылки динамическими. Мне нужно что-то вроде этого:

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

Как бы я ссылался на переменные в контексте rlm()? Я думал, что-то вроде eval(), но это не сработало.

Спасибо!

Ответы [ 2 ]

15 голосов
/ 22 сентября 2010

Одним из решений является создание формулы с использованием 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

3 голосов
/ 08 декабря 2014

Вы можете создавать формулы на основе строк с помощью функции reformulate:

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

myresults <- rlm(form, data = dbdata)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...