R 파이프 연산자 완벽 정리: |> vs %>% 차이와 사용법 (2026 최신)

2026년 8월 업데이트: 현재 R 최신 정식 버전은 4.6.1입니다. 새 코드에서는 별도 패키지가 필요 없는 기본 파이프 |>를 우선 고려하고, 기존 tidyverse 코드나 . 플레이스홀더를 여러 번 쓰는 작업에서는 %>%를 사용하면 됩니다.

R로 데이터를 분석하면 한 함수의 결과를 다음 함수로 계속 넘기는 일이 많습니다. 파이프 연산자는 중첩된 코드를 사람이 읽는 순서대로 바꿔 줍니다. 이 글에서는 base R의 |>와 magrittr의 %>% 사용법, 버전별 기능, 실제 차이와 선택 기준을 최신 문법으로 정리합니다.

R 파이프 연산자란?

파이프는 왼쪽에서 계산한 값을 오른쪽 함수로 전달합니다. 예를 들어 다음 세 코드는 같은 결과를 냅니다.

# 중첩 호출
round(mean(log(1:10)), 2)

# base R 파이프
1:10 |> log() |> mean() |> round(2)

# magrittr 파이프
1:10 %>% log() %>% mean() %>% round(2)

# [1] 1.51

x |> f(y)는 기본적으로 f(x, y)로 변환됩니다. x %>% f(y)도 일반적인 경우에는 같은 방식으로 동작합니다. 긴 분석 과정을 위에서 아래로 읽을 수 있어 중간 단계의 의미와 오류 위치를 파악하기 쉬워집니다.

R 파이프 연산자 패키지 magrittr 이름의 유래가 된 르네 마그리트 작품
magrittr라는 이름은 르네 마그리트의 작품 “Ceci n’est pas une pipe”에서 가져왔습니다.

base R 파이프 |> 사용법

|>는 R 4.1.0에서 도입된 기본 연산자입니다. 패키지를 불러오지 않아도 사용할 수 있으며, 오른쪽에는 함수 호출을 적어야 합니다.

mtcars |>
  subset(cyl == 4) |>
  head(3)

왼쪽 값은 기본적으로 오른쪽 함수의 첫 번째 인수에 들어갑니다. 따라서 위 코드는 head(subset(mtcars, cyl == 4), 3)과 같습니다.

첫 번째가 아닌 인수로 보내기: _

R 4.2.0부터는 밑줄 플레이스홀더 _로 입력 위치를 지정할 수 있습니다. 단, _는 오른쪽 식에서 한 번만 사용할 수 있고 일반 함수 호출에서는 이름이 있는 인수에 넣어야 합니다.

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

3 |>
  sample(1:10, size = _)

3 |> sample(1:10, _)처럼 이름 없이 쓰면 오류가 납니다. 복잡한 위치에 값을 여러 번 사용해야 한다면 익명 함수를 사용합니다.

1:5 |>
  (\(x) c(x, rev(x)))()

# [1] 1 2 3 4 5 5 4 3 2 1

열과 요소 바로 추출하기

R 4.3.0부터 _를 추출 체인의 시작에 둘 수 있습니다. $, [, [[, @를 이어서 사용할 수 있습니다.

mtcars |> _$cyl

mtcars |>
  lm(mpg ~ disp, data = _) |>
  _$coefficients[[2]]

# [1] -0.04121512

magrittr 파이프 %>% 사용법

%>%는 magrittr 패키지가 제공하고 dplyr도 다시 내보내는 연산자입니다. 먼저 관련 패키지를 불러와야 합니다.

library(dplyr)    # %>% 사용 가능
# 또는 library(magrittr)

mtcars %>%
  filter(cyl == 4) %>%
  summarise(mean_mpg = mean(mpg))

.으로 입력 위치 지정하기

첫 번째가 아닌 인수로 값을 보낼 때는 점 .을 사용합니다. base R의 _와 달리 한 식에서 여러 번 사용할 수도 있습니다.

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

1:5 %>%
  c(., rev(.))

# [1] 1 2 3 4 5 5 4 3 2 1

%>%는 오른쪽에 괄호 없는 함수 이름도 허용합니다. 예를 들어 1:10 %>% sum은 실행되지만, base R에서는 반드시 1:10 |> sum()처럼 함수 호출 형태로 써야 합니다.

|>와 %>% 차이점

비교 항목|>%>%
제공 위치base Rmagrittr 패키지
최소 버전R 4.1.0패키지 의존
패키지 로딩필요 없음magrittr, dplyr 등 필요
위치 지정_, 일반 호출에서는 이름 있는 인수에 한 번., 여러 번 사용 가능
오른쪽 함수 괄호필요: sum()생략 가능: sum
요소 추출R 4.3.0부터 _$x[[1]].$x[[1]]
추가 연산자없음%T>%, %$>%, %<>% 등
실행 방식R 구문 변환연산자 함수 호출

magrittr에만 있는 확장 파이프

  • %T>%: 중간 작업을 실행하되 원래 왼쪽 값을 다음 단계로 전달합니다.
  • %$>%: 데이터 프레임의 열 이름을 바로 노출합니다.
  • %<>%: 파이프 결과를 원래 객체에 다시 할당합니다.

이 확장 기능이 필요하면 library(magrittr)를 명시적으로 불러오는 편이 코드의 의존성을 분명하게 보여 줍니다.

2026년에는 무엇을 선택해야 할까?

  • 새 프로젝트: 특별한 이유가 없다면 의존성이 없는 |>를 기본값으로 사용합니다.
  • 기존 tidyverse 프로젝트: 일관성을 위해 기존 %>% 스타일을 유지해도 됩니다.
  • 값을 여러 위치에 반복 삽입: %>%의 .이 간단합니다. |>에서는 익명 함수를 사용합니다.
  • R 4.0 이하도 지원해야 하는 패키지: |> 구문 자체를 파싱하지 못하므로 최소 R 버전을 올리거나 %>%를 유지합니다.

두 연산자를 한 분석 흐름에서 섞어 써도 실행은 되지만, 협업 코드에서는 한 가지 스타일로 통일하는 편이 읽기 쉽습니다. %>% 코드를 기계적으로 모두 바꾸기보다는 ., 괄호 없는 함수, magrittr 확장 연산자를 사용했는지 먼저 확인하세요.

RStudio 파이프 단축키

RStudio에서 파이프 입력 단축키는 Windows·Linux의 Ctrl + Shift + M, macOS의 Cmd + Shift + M입니다. 최근 RStudio IDE에서는 기본적으로 |>가 입력됩니다. %>%로 바꾸려면 Tools → Global Options → Code → Editing의 native pipe 설정을 변경할 수 있습니다. 프로젝트 옵션에서 프로젝트별 스타일을 따로 지정할 수도 있습니다.

자주 발생하는 오류

“could not find function %>%”

%>%를 제공하는 패키지를 불러오지 않은 경우입니다. library(magrittr) 또는 library(dplyr)를 먼저 실행하세요.

“pipe placeholder can only be used as a named argument”

|>의 _를 이름 없는 인수로 사용한 경우입니다. sample(1:10, size = _)처럼 인수 이름을 적으세요. 단, _$column 같은 추출 체인은 예외이며 R 4.3.0 이상이 필요합니다.

“The pipe operator requires a function call as RHS”

1:10 |> sum처럼 함수 이름만 쓴 경우입니다. 1:10 |> sum()으로 괄호를 추가하세요.

버전별 핵심 기능

  1. R 4.1.0: 기본 파이프 |> 도입
  2. R 4.2.0: 이름 있는 인수에 쓰는 _ 플레이스홀더 추가
  3. R 4.3.0: _$coef[[2]] 형태의 추출 체인 지원
  4. R 4.6.1: 2026년 8월 현재 최신 정식 버전. 파이프의 핵심 문법은 위와 동일

공식 문서

한 줄 결론: 2026년 새 R 코드에는 |>가 간결한 기본 선택입니다. 다만 %>%는 사라진 문법이 아니며, 기존 tidyverse 코드와 magrittr 고유 기능을 읽고 유지하려면 여전히 알아둘 가치가 있습니다.

최종 업데이트: 2026년 8월 24일


본 포스팅은 R 프로그래밍 기초 공략.zip 교재의 일부분 입니다. 본 교재는 R을 독학하시는 분들을 위하여 특별히 제작된 교재입니다. R을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!


당신이 좋아할 만한 콘텐츠

by Google Adsense


관련 글 보기