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)도 일반적인 경우에는 같은 방식으로 동작합니다. 긴 분석 과정을 위에서 아래로 읽을 수 있어 중간 단계의 의미와 오류 위치를 파악하기 쉬워집니다.

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()처럼 함수 호출 형태로 써야 합니다.
|>와 %>% 차이점
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()으로 괄호를 추가하세요.
버전별 핵심 기능
- R 4.1.0: 기본 파이프
|>도입 - R 4.2.0: 이름 있는 인수에 쓰는
_플레이스홀더 추가 - R 4.3.0:
_$coef[[2]]형태의 추출 체인 지원 - R 4.6.1: 2026년 8월 현재 최신 정식 버전. 파이프의 핵심 문법은 위와 동일
공식 문서
한 줄 결론: 2026년 새 R 코드에는 |>가 간결한 기본 선택입니다. 다만 %>%는 사라진 문법이 아니며, 기존 tidyverse 코드와 magrittr 고유 기능을 읽고 유지하려면 여전히 알아둘 가치가 있습니다.
최종 업데이트: 2026년 8월 24일
본 포스팅은 R 프로그래밍 기초 공략.zip 교재의 일부분 입니다. 본 교재는 R을 독학하시는 분들을 위하여 특별히 제작된 교재입니다. R을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!
당신이 좋아할 만한 콘텐츠
by Google Adsense