>(管道大于)在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


以上是>(管道大于)在R中是什么意思?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>