반응형
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')"
반응형
'R' 카테고리의 다른 글
윈도우 작업 스케줄러에 R script 등록하기 (2) | 2020.03.05 |
---|---|
[R] Nelson Rules in R (5) | 2020.02.04 |
[R] R에서 문자열 합치기 or list의 모든 element 하나로 합치기 (paste in R) (0) | 2019.09.17 |
[R] 수평선, 수직선 in ggplot (add horizontal line, vertical line in ggplot2) (0) | 2019.09.05 |
[R] 막대그래프란? R에서 막대그래프 그리기 (Bar Chart in R) (0) | 2019.09.01 |