Как преобразовать столбец формул для включения префикса фрейма данных в R - PullRequest
0 голосов
/ 25 января 2012

Как мне преобразовать столбец формул R для включения спецификации фрейма данных? Например, у меня есть столбец с сотнями формул, но они не содержат спецификацию фрейма данных, например:

365/(x/y)
365/(x/(y + z))
365/(x/ (y - z))
c + d + e + f

и я хотел бы преобразовать весь столбец так:

365/(r$x/r$y)
365/(r$x/(r$y + r$z))
365/(r$x/ (r$y - r$z))
r$c + r$d + r$e + r$f

так что я в основном хочу добавить префикс (r $) к каждой текстовой группе, разделенной операторами. это можно сделать в R?

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Гораздо лучший подход - предоставить фрейм данных напрямую, например,

lm(y ~ x, data=myframe)

, поскольку многие функции моделирования поддерживают аргумент data=.

В качестве альтернативы вы можете использовать with и within функции

with(myframe, summary( 365/(x/y) ) )

, которые обеспечивают доступ к компонентам фрейма данных myframe без использования префикса.

2 голосов
/ 25 января 2012

Обычный способ сделать это - обернуть формулу (или, точнее, выражение) в with(). Вам потребуется eval () - использовать каждое выражение в контексте среды, созданной with «замыканием», если вы хотите создать результирующий вектор.

expr <- expression(365/(x/y),
 365/(x/(y + z)),
 365/(x/ (y - z)),
 c + d + e + f)
dat <- data.frame(x=sample(1:100, 10),
  y=sample(1:100, 10),
  z=sample(1:100, 10),
  c=sample(1:100, 10),
  d=sample(1:100, 10),
  e=sample(1:100, 10),
  f=sample(1:100, 10))
 sapply(expr, function(ep) with(dat, eval(ep)))
            [,1]       [,2]         [,3] [,4]
 [1,]  121.66667  1155.8333   -912.50000  168
 [2,] 4197.50000  4471.2500   3923.75000  131
 [3,]  290.00000   620.0000    -40.00000  219
 [4,]   60.83333  3224.1667  -3102.50000  245
 [5,] 6752.50000 24637.5000 -11132.50000  229
 [6,] 4901.42857  7456.4286   2346.42857  239
 [7,]  127.75000   246.3750      9.12500  177
 [8,]  355.64103  1179.2308   -467.94872  142
 [9,]  500.18519   959.8148     40.55556  161
[10,]  299.48718   444.5513    154.42308  194
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...