8  R 파이프 연산자(pipe)

프로그래밍 언어에서 파이프(pipe)는 앞선 함수의 결과를 바로 받아서 사용할 수 있게 하여, 중간 임시 변수들을 만들지 않고 함수 등을 연결하여, 마치 문장을 연결하듯이 코딩할 수 있게 해 주는 기능을 말한다.

예를 들어 다음과 같은 코드를 보자. data라는 데이터프레임이 있다고 가정하자. 이것을 여러 함수를 거치면서 그 내용을 result1, result2, result3라는 임시 변수에 저장하고, 마지막에 result4를 출력한다고 하자. 이렇게 하면 중간 변수를 만들어야 하고, 가독성도 떨어진다.

result1 <- function1(data)
result2 <- function2(result1)
result3 <- function3(result2)
result4 <- function4(result3)
result4 # 최종 결과 

만약 R 네이티브(native) 파이프 연산자 |>를 사용하면 다음과 같이 쓸 수 있어서 좋고, 코드를 이해하기도 편하다.

result <- data |> 
            function1() |> 
            function2() |> 
            function3() |> 
            function4()

여기서 네이트브(native)라고 하는 것을 R 언어의 핵심에 내재되어 있음을 의미한다. 따라서 별도의 외부 패키지를 사용하지 않아도 사용할 수 있다.

그런데 R 네이티브 파이프 |>는 R 4.1.0 버전부터 지원되기 시작했다. 그 이전 버전에서는 magrittr 패키지의 %>% 연산자를 사용하여 이 기능을 이용했다. 이 둘의 차이도 정리해 두려고 한다.

8.1 파이프 연산자의 사용

R 4.1.0 버전부터 지원되는 네이티브 파이프 연산자 |>는 다음과 같이 사용한다.

library(dplyr)
library(ggplot2)
mpg |> 
    group_by(cyl) |> 
    summarize(n = n(), mean_cty = mean(cty))
# A tibble: 4 × 3
    cyl     n mean_cty
  <int> <int>    <dbl>
1     4    81     21.0
2     5     4     20.5
3     6    79     16.2
4     8    70     12.6

magrittr 패키지의 %>% 연산자도 같은 방법으로 사용한다.

library(magrittr)
mpg %>% 
    group_by(cyl) %>% 
    summarize(n = n(), mean_cty = mean(cty))
# A tibble: 4 × 3
    cyl     n mean_cty
  <int> <int>    <dbl>
1     4    81     21.0
2     5     4     20.5
3     6    79     16.2
4     8    70     12.6

8.2 네이티브 파이프와 magrittr 파이프의 차이점

네이티브 파이프와 magrittr 파이프는 사용법은 비슷한데 약간의 차이가 있다. 대표적인 차이점은 “넘어온 그것”을 표현하는 문법이다.

  • 네이티브 파이프 |>_를 사용하여 “넘어온 그것”을 표현한다.
  • magrittr 파이프 %>%.을 사용하여 “넘어온 그것”을 표현한다.

네이티브 파이프와 플레이스홀더 _를 사용한 예이다.

mtcars |> lm(mpg ~ wt, data = _)

Call:
lm(formula = mpg ~ wt, data = mtcars)

Coefficients:
(Intercept)           wt  
     37.285       -5.344  

magrittr 파이프와 플레이스홀더 .을 사용한 예이다. magrittr 패키지는 dplyr 패키지에서 상당히 많이 사용되어 왔기 때문에 이것을 사용하는 예시를 인터넷 등에서 많이 볼 수 있을 것이다.

mtcars %>% lm(mpg ~ wt, data = .)

Call:
lm(formula = mpg ~ wt, data = .)

Coefficients:
(Intercept)           wt  
     37.285       -5.344  

8.3 정리

  • 네이티브 파이프: |>_
  • magrittr 파이프: %>%.

파이프에 대한 도움말은 다음과 같이 실행하여 볼 수 있다.

?`|>`

?`%>%`
R에서 +, [, |> 등과 같은 특수한 기호 등에 대한 도움말 확인

위와 같이 ?를 쓰고 관련 내용을 백틱에 쓰면 된다. 백틱은 보통 키보드에서 숫자 1 앞에서 키가 있다.