R

[R] R에서 eval() 함수로 표현식 실행하기 (eval in R)

슈퍼짱짱 2019. 9. 18. 08:00
반응형

R에서 eval() 함수로 character expression 실행하기

(execute r-code stored in a string variable)


for문을 통해 반복하면서 특정 문자만 바꾸어 무언가를 실행하고 싶은 경우가 있다.

예를 들면, 회귀분석에서 들어가는 feature를 바꾼다던가, 데이터의 모든 컬럼에 대해 그래프를 그릴때 등이다.

그 때, eval 함수를 이용할 수 있다.


다음은 eval 함수 예제코드이다.


1
2
a <- "5+5"
b <- eval(parse(text="5+5"))
cs


> a

"5+5"


> class(a)

"character"


> b

10


> class(b)

"numeric"


이는 for문에서 다음과 같이 활용될 수 있다.

5개의 컬럼을 가진 데이터의 각 컬럼에 대해 ggplot으로 그림을 그려본다고 가정하자. 코드는 다음과 같다.


1
2
3
4
5
6
7
8
9
10
library(ggplot2)
dat <- data.frame(x1=rnorm(50), 
                  x2=rnorm(50),
                  x3=rnorm(50),
                  x4=rnorm(50),
                  x5=rnorm(50))
 
for(i in names(dat)){
  eval(parse(text=paste0("ggplot(dat) + geom_point(aes(x=",i,", y=1:50)) + ggtitle('",i,"')")))
}
cs


보통 paste로 문자열을 연결한다. 

i="x5"라 했을 때 eval로 실행되는 expression 은 다음과 같다.


> paste0("ggplot(dat) + geom_point(aes(x=",i,", y=1:50)) + ggtitle('",i,"')")

"ggplot(dat) + geom_point(aes(x=x5, y=1:50)) + ggtitle('x5')"


>> paste 자세히 바로가기

반응형