2012-01-25 27 views
0

如何將一列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中可以做到嗎?

回答

3

一個更好的方法是直接提供數據幀,例如,

lm(y ~ x, data=myframe) 

儘可能多的建模功能支持data=參數。

或者,也可以使用withwithin功能

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

,其提供對數據的訪問幀myframe的部件,而不需要的前綴。

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 
相關問題