2012-01-25 4 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 기능 접두사를 필요로하지 않고 데이터 프레임 myframe의 구성 요소에 대한 액세스를 제공

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

를 사용할 수 있습니다.

2

이 작업을 수행하는 일반적인 방법은 with()에 수식 (또는보다 정확하게 표현식)을 두는 것입니다. 결과 벡터를 생성하려면 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 
관련 문제