r - R 的新原生管道 `|>` 和 magrittr 管道 `%>%` 有什么区别?

标签 r pipe tidyverse

在 R 4.1 中引入了本地管道运算符,它比以前的实现“更精简”。我已经注意到原生 |> 之间的一个区别。和 magrittr 管 %>% ,即2 %>% sqrt有效,但 2 |> sqrt没有而且必须写成 2 |> sqrt() .使用新的管道操作符时是否有更多的差异和陷阱需要注意?

最佳答案

它们之间的另一个区别是管道输入值 .可用作 magrittr 中的占位符的管道

c("dogs", "cats", "rats") %>% grepl("at", .)
#[1] FALSE  TRUE  TRUE
但这对于 R 的 native 管道是不可能的。
c("dogs", "cats", "rats") |> grepl("at", .)

Error in grepl(c("dogs", "cats", "rats"), "at", .) : object '.' not found


以下是引用它们的不同方法 -
  • 编写一个单独的函数 -
  • find_at = function(x) grepl("at", x)
    c("dogs", "cats", "rats") |> find_at()
    #[1] FALSE  TRUE  TRUE
    
    2个。使用匿名函数 -
    c("dogs", "cats", "rats") |> {function(x) grepl("at", x)}()
    
    2 乙。使用新的匿名函数语法
    c("dogs", "cats", "rats") |> {\(x) grepl("at", x)}()
    
  • 按名称指定第一个参数。这依赖于 native 管道管道进入第一个未命名参数的事实,因此如果您为第一个参数提供名称,它会“溢出”到第二个参数(如果您按名称指定多个参数,依此类推)

  • c("dogs", "cats", "rats") |> grepl(pattern="at")
    #> [1] FALSE  TRUE  TRUE
    
    示例 1 和 2 取自 - https://www.jumpingrivers.com/blog/new-features-r410-pipe-anonymous-functions/
    示例 3 取自 https://mobile.twitter.com/rlangtip/status/1409904500157161477

    关于r - R 的新原生管道 `|>` 和 magrittr 管道 `%>%` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67633022/

    相关文章:

    R - 如何返回数据框中选定特定行下方的所有行?

    R&Inkscape : text labels in SVG graphics exported from R did not recognized as a text in Inkscape

    c - 通过管道和 fork 传递具有 2 个动态数组的结构

    encoding - 如何通过管道 tail -f 到 iconv 命令?

    r - 列的顺序在 data.table 索引(setkey)中重要吗?

    R dplyr rowwise mean 或 min 等方法?

    bash - 如何将所有输出重定向到/dev/null?

    r - 如何添加具有每个数字列平均值的行

    r - dplyr::summarize 按字母顺序排列,但我需要原始顺序

    r - 使用 dplyr 通过多个函数传递列名