r - |>(管道大于)在R中是什么意思?
问题描述
我最近遇到了|>
R 中的代码。它是一个竖线字符(管道),后跟一个大于符号。
这是一个例子:
mtcars |> head()
|>
代码在做什么?
解决方案
|>
是基本的 R“管道”运算符。它是4.1.0 版本中的新功能。
简而言之,管道运算符提供运算符左侧(LHS)的结果作为右侧(RHS)的第一个参数。
考虑以下:
1:3 |> sum()
#[1] 6
这里,数字 1 到 3 的向量作为sum
函数的第一个参数提供。
左侧结果总是成为右侧调用的第一个参数。考虑:
args(sum)
#function (..., na.rm = FALSE)
c(1:3, NA_real_) |> sum(na.rm = TRUE)
#[1] 6
强调call很重要,因为只要第一个参数被命名,您就可以将 LHS 重定向到其他参数。考虑:
args(rnorm)
#function (n, mean = 0, sd = 1)
100 |> rnorm(n = 5)
#[1] 99.94718 99.93527 97.46838 97.38352 100.56502
args(sum)
#function (..., na.rm = FALSE)
sum(na.rm = TRUE, ... = c(1:2,NA_real_))
#[1] 3
TRUE |> sum(... = c(1:2,NA_real_))
#[1] NA
使用运算符的一个好处|>
是,与嵌套函数调用相比,它可以使代码在逻辑上更易于遵循:
split(x = iris[-5], f = iris$Species) |>
lapply(min) |>
do.call(what = rbind)
# [,1]
#setosa 0.1
#versicolor 1.0
#virginica 1.4
#Compared to:
do.call(rbind,lapply(split(iris[-5],iris$Species),min))
此功能类似于magrittr::%>%
运算符(也在 中实现dplyr
)。
然而,与 不同%>%
的是,目前没有办法将 LHS 多次通过管道输送到右侧或任意位置。Magrittr 使用.
LHS 的占位符并{}
任意放置它。
library(magrittr)
iris[iris$Sepal.Length > 7,] %>% subset(.$Species=="virginica")
TRUE %>% {sum(c(1:2,NA_real_),na.rm = .)}
[1] 3
此外,与基本 R 不同|>
,%>%
运算符可以在没有 的情况下通过管道传递到函数调用()
:
1:3 |> sum
#Error: The pipe operator requires a function call as RHS
1:3 %>% sum
#[1] 6
推荐阅读
- javascript - 替换内容在等待时循环
- javascript - JS Promise 包装函数返回“无法读取未定义的属性 '0'”
- unix - AWK 匹配行/列然后比较另一列并打印
- php - 将文本小时和分钟转换为 int
- python - 字符列表而不是 Python 中的字符串
- amazon-web-services - 多个 AWS 账户的 Bitbucket Pipeline 配置?
- hyperledger-fabric - Hyperledger Fabric 1.3 中存储的链码在哪里
- java - 收到信号时优雅地关闭应用程序
- python - 如何绘制绘图python的导数?
- android - 当背景以编程方式为空时,EditText 具有顶部额外空间问题