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 |