1 前言

本文只讲一个问题:%>%|> 到底有什么区别,以及写代码时该怎么选。

核心结论很简单:两者都能实现“把左边结果传给右边”,但 |> 是 R 原生语法,%>% 来自外部包。

2 %>% 是什么

%>%magrittr 包提供的管道操作符,也常见于 dplyr 等 tidyverse 风格代码中。

例如:

x <- 1:5
x %>% sum()

等价于:

sum(x)

在数据处理代码里,它很常见:

library(dplyr)

mtcars %>%
  filter(mpg > 20) %>%
  select(mpg, wt)

3 |> 是什么

|>R 原生 提供的管道操作符,从 R 4.1.0 开始可用。

例如:

x <- 1:5
x |> sum()

等价于:

sum(x)

4 最重要的区别

%>%|> 最关键的区别不在“能不能用”,而在“依赖谁”。

%>% 来自外部包 magrittr,所以如果你在函数或包里使用它,通常就意味着你要引入额外依赖。

usethis::use_package("magrittr")

|> 是 R 自带语法,不需要额外安装包,也不需要为它单独声明依赖。

所以如果你是在写 基础函数R 包|> 往往更轻量。

5 一个简单对比

使用 %>%

library(dplyr)

mtcars %>%
  head(3) %>%
  names()

使用 |>

mtcars |>
  head(3) |>
  names()

这两段代码效果基本一样。

6 取舍建议

是否要把老管道符 %>% 全部换成新管道符 |>,答案是:不必强行全部替换。

更实用的建议是:

  • 旧代码如果已经大量使用 %>%,而且运行稳定,就不用为了“新”而全部重写
  • 新写的基础函数、教学示例、R 包代码,通常可以优先用 |>
  • 如果你的代码本来就高度依赖 dplyr / tidyverse 风格,继续用 %>% 也完全没问题
  • 如果你希望减少包依赖,让代码更基础、更通用,就优先选择 |>

7 一句话总结

旧代码不必强改,新代码优先用 |>;但如果你本来就在 tidyverse 场景里,继续用 %>% 也很合理。

8 Finally

如果对你有帮助欢迎关注本Up Bilibili LogitLegendary