본문 바로가기

R

R evel함수활용 : String Source Code Execute

R에서 eval함수를 활용하여 문자열 소스 코드를 실행하는 방법을 알아보자.


R에서도 javascript의 eval함수와 동일한 기능을 제공하는 eval함수가 존재한다.

이 함수가 필요한 이유는 몇가지 있을 수 있겠지만 나는 아래와 같은 이유로 해당 함수를 사용하게 되었다.


회귀분석을 진행하던 중 여러변수를 가지고 regression할 필요가 생겼다.

lm(PRICE ~ VALUE1, data = df)

lm(PRICE ~ VALUE1 + VALUE2, data = df)

.... 반복 ....


그래서 처음에는 아래와 같이 시도를 하였다.

var <- 'VALUE1 + VALUE2'  # loop를 돌면서 변수 문자열을 생성한다.

lm(PRICE ~ var, data = df)



그러나 아래와 같은 에러가 발생한다.

Error in model.frame.default(formula = medv ~ var, data = BostonHousing) : 
  variable lengths differ (found for 'var')

변수로 지정하면 안된다...


그래서 생각한 방법은 eval함수를 활용한 방법이다.

regression할 소스코드를 생성 후 해당 문자열을 eval로 실행하는 방법이다.

lm.var <- 'VALUE'

lm.str <- paste('lm.model<-lm (PRICE~',lm.var,', data = df )',sep='')

eval(parse(text=lm.str))



paste함수를 이용하여 문자열을 생성 후 eval함수로 실행한다.

위 소스는 loop소스의 일부가 되며 lm.var는 계속 변경되게 되며 문제 없이 regression이 실행될 수 있다.


javascript에서 eval함수를 활용하는 이유와 같겠지만 R에서 문자열로 소스 코드를 생성하여 실행할 필요가 있다면 eval함수를 활용하는 방법이 있겠다.

'R' 카테고리의 다른 글

R 데이터프레임(DF) grep & gsub  (0) 2014.01.17
R 데이터프레임(DF) Select Column Distinct  (0) 2014.01.17
R 데이터프레임(DF) Select Column  (0) 2014.01.17