当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R pipeOp 前向管道操作符


R语言 pipeOp 位于 base 包(package)。

说明

将值通过管道传送到调用表达式或函数表达式中。

用法

lhs |> rhs

参数

lhs

表达式产生一个值。

rhs

一个调用表达式。

细节

管道表达式将左侧表达式 lhs 的结果传递或通过管道传输到右侧表达式 rhs

lhs 作为第一个参数插入到调用中。因此 x |> f(y) 被解释为 f(x, y)

为了避免歧义,rhs 调用中的函数在语法上可能不是特殊的,例如 +if

还可以在 rhs 调用中使用带有占位符 _ 的命名参数来指定 lhs 的插入位置。占位符只能在 rhs 上出现一次。

作为实验性函数,占位符也可以用作提取调用中的第一个参数,例如 _$coef 。更一般地,它可以用作提取链的头部,例如 _$coef[[2]] ,使用一系列提取函数 $[[[@

管道表示法允许以某种方式编写嵌套的调用序列,从而使处理步骤的顺序更容易遵循。

目前,管道操作是作为语法转换来实现的。因此,写为 x |> f(y) 的表达式将被解析为 f(x, y) 。值得强调的是,虽然管道中的代码是按顺序编写的,但适用于求值的常规 R 语义,因此管道表达式仅在首次在 rhs 表达式中使用时才会求值。

返回计算转换后的表达式的结果。

背景

前向管道运算符的灵感来自于 magrittr 包中引入的管道,但更加精简。它类似于其他语言(包括 F#、Julia 和 JavaScript)中引入的管道或管道运算符。

例子

# simple uses:
mtcars |> head()                      # same as head(mtcars)
mtcars |> head(2)                     # same as head(mtcars, 2)
mtcars |> subset(cyl == 4) |> nrow()  # same as nrow(subset(mtcars, cyl == 4))

# to pass the lhs into an argument other than the first, either
# use the _ placeholder with a named argument:
mtcars |> subset(cyl == 4) |> lm(mpg ~ disp, data = _)
# or use an anonymous function:
mtcars |> subset(cyl == 4) |> (function(d) lm(mpg ~ disp, data = d))()
mtcars |> subset(cyl == 4) |> (\(d) lm(mpg ~ disp, data = d))()
# or explicitly name the argument(s) before the "one":
mtcars |> subset(cyl == 4) |> lm(formula = mpg ~ disp)

# using the placeholder as the head of an extraction chain:
mtcars |> subset(cyl == 4) |> lm(formula = mpg ~ disp) |> _$coef[[2]]

# the pipe operator is implemented as a syntax transformation:
quote(mtcars |> subset(cyl == 4) |> nrow())

# regular R evaluation semantics apply
stop() |> (function(...) {})() # stop() is not used on RHS so is not evaluated

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Forward Pipe Operator。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。