如何转换公式列以包含R中的数据框前缀

时间:2012-01-25 17:20:56

标签: r

如何转换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 个答案:

答案 0 :(得分:3)

更好的方法是直接提供数据帧,例如

lm(y ~ x, data=myframe)

尽可能多的建模函数支持data=参数。

或者,您可以使用withwithin函数

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

,提供对数据框myframe的组件的访问,而无需前缀。

答案 1 :(得分:2)

通常的做法是在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