tidyverse 특집 / R과 magrittr
dplyr을 써보신 분은 알겠지만, %>% 연산자는 대단히 편리합니다. 이 기능은 패키지 magrittr에서 나온 것입니다.
library(magrittr)
attitude %>%
lm(learning~previleges,data=.) %>%
stargazer(type='text')
결과는,
===============================================
Dependent variable:
---------------------------
learning
-----------------------------------------------
privileges 0.473***
(0.158)
Constant 31.222***
(8.591)
-----------------------------------------------
Observations 30
R2 0.243
Adjusted R2 0.216
Residual Std. Error 10.390 (df = 28)
F Statistic 9.006*** (df = 1; 28)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01
x=sort(abs(x))
라고 하는 표현을
x %<>%abs%<>%sort
이렇게 하면 됩니다.
예를 보겠습니다.
mean(attitude$learning)
magrittr을 사용하면 다음과 같이 표현할 수 있습니다.
attitude %$%
mean(learning)
rnorm(200) %>%
matrix(ncol=2 )%T>%
plot %>%
colSums()
결과를 보면 그림도 나오고(plot 실행), colSums()의 값도 계산이 됩니다. 만약 %T>% 대신에 %>%를 사용하면 plot()의 내용이 colSums()로 전달되어 에러가 발생됩니다.
연쇄
가령 다음과 같이 OLS 회귀를 간결하게 표현할 때도 쓸 수 있습니다.library(magrittr)
attitude %>%
lm(learning~previleges,data=.) %>%
stargazer(type='text')
결과는,
===============================================
Dependent variable:
---------------------------
learning
-----------------------------------------------
privileges 0.473***
(0.158)
Constant 31.222***
(8.591)
-----------------------------------------------
Observations 30
R2 0.243
Adjusted R2 0.216
Residual Std. Error 10.390 (df = 28)
F Statistic 9.006*** (df = 1; 28)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01
할당
값을 계산한 다음 원래 변수로 덮어 쓰려면? 보통x=sort(abs(x))
라고 하는 표현을
x %<>%abs%<>%sort
이렇게 하면 됩니다.
예를 보겠습니다.
값을 꺼내 사용하기
예를 들어 다음과 같은 코드가 있다고 합시다.mean(attitude$learning)
magrittr을 사용하면 다음과 같이 표현할 수 있습니다.
attitude %$%
mean(learning)
%>%와 %T>%의 차이
%>%의 경우, 앞의 내용을 그 다음 함수가 첫번째 인수로 쓰지만, %T>%는 앞의 내용을 아예 함수의 입력값 전체로 받아들이기 때문에 뒤에 걸리는 체인은 함수의 이름만 와도 결과가 표현됩니다. 또한, 이 실행 앞의 내용이 체인 다음으로 직접 연결됩니다. 예를 보겠습니다.rnorm(200) %>%
matrix(ncol=2 )%T>%
plot %>%
colSums()
결과를 보면 그림도 나오고(plot 실행), colSums()의 값도 계산이 됩니다. 만약 %T>% 대신에 %>%를 사용하면 plot()의 내용이 colSums()로 전달되어 에러가 발생됩니다.
댓글
댓글 쓰기