當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。