將對象通過管道轉發到函數或調用表達式中。
細節
配售lhs
其他地方在rhs
稱呼
通常,您會希望 lhs
在第一個位置以外的其他位置調用 rhs
。為此,您可以使用點 (.
) 作為占位符。例如,y %>% f(x, .)
相當於 f(x, y)
,z %>% f(x, y, arg = .)
相當於f(x, y, arg = z)
。
將點用於次要目的
通常,除了 lhs
本身的值之外,rhs
調用中還需要 lhs
的某些屬性或特性,例如行數或列數。在 rhs
調用中多次使用點占位符是完全有效的,但根據設計,在嵌套函數調用中使用它時,行為略有不同。特別是,如果占位符僅在嵌套函數調用中使用,lhs
也將被放置為第一個參數!原因是在大多數 use-cases 中,這會產生最具可讀性的代碼。例如,iris %>% subset(1:nrow(.) %% 2 == 0)
相當於iris %>% subset(., 1:nrow(.) %% 2 == 0)
,但稍微更緊湊。可以通過將 rhs
用大括號括起來來否決此行為。例如, 1:10 %>% {c(min(.), max(.))}
相當於 c(min(1:10), max(1:10))
。
使用%>%
與調用-或function-producingrhs
可以在 lhs
的管道化發生之前強製評估 rhs
。當 rhs
生成相關調用或函數時,這非常有用。要首先評估 rhs
,請將其括在括號中,即 a %>% (function(x) x^2)
和 1:10 %>% (call("sum"))
。與此相關的另一個示例是使用 $
運算符訪問的引用類方法,其中可以執行 x %>% (rc$f)
,而不是 x %>% rc$f
。
技術說明
magrittr 管道運算符使用非標準評估。他們捕獲他們的輸入並檢查它們以找出如何繼續。首先,從所有單獨的右側表達式生成一個函數,然後通過將該函數應用於左側來獲得結果。對於大多數目的,人們可以忽略 magrittr 求值的微妙方麵,但某些函數可能會捕獲其調用環境,因此使用運算符不會完全等同於沒有 pipe-operators 的 "standard call"。
另一個注意事項是,在 pipe-chain(+, -, $,
等)中使用非 magrittr 運算符時建議特別注意,因為運算符優先級將影響鏈的評估方式。一般來說,建議使用 magrittr 提供的別名。
也可以看看
%<>%
, %T>%
, %$%
例子
# Basic use:
iris %>% head
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
# Use with lhs as first argument
iris %>% head(10)
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 4.6 3.4 1.4 0.3 setosa
#> 8 5.0 3.4 1.5 0.2 setosa
#> 9 4.4 2.9 1.4 0.2 setosa
#> 10 4.9 3.1 1.5 0.1 setosa
# Using the dot place-holder
"Ceci n'est pas une pipe" %>% gsub("une", "un", .)
#> [1] "Ceci n'est pas un pipe"
# When dot is nested, lhs is still placed first:
sample(1:10) %>% paste0(LETTERS[.])
#> [1] "1A" "10J" "2B" "9I" "8H" "3C" "4D" "5E" "6F" "7G"
# This can be avoided:
rnorm(100) %>% {c(min(.), mean(.), max(.))} %>% floor
#> [1] -3 -1 2
# Lambda expressions:
iris %>%
{
size <- sample(1:10, size = 1)
rbind(head(., size), tail(., size))
}
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 4.6 3.4 1.4 0.3 setosa
#> 8 5.0 3.4 1.5 0.2 setosa
#> 143 5.8 2.7 5.1 1.9 virginica
#> 144 6.8 3.2 5.9 2.3 virginica
#> 145 6.7 3.3 5.7 2.5 virginica
#> 146 6.7 3.0 5.2 2.3 virginica
#> 147 6.3 2.5 5.0 1.9 virginica
#> 148 6.5 3.0 5.2 2.0 virginica
#> 149 6.2 3.4 5.4 2.3 virginica
#> 150 5.9 3.0 5.1 1.8 virginica
# renaming in lambdas:
iris %>%
{
my_data <- .
size <- sample(1:10, size = 1)
rbind(head(my_data, size), tail(my_data, size))
}
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 4.6 3.4 1.4 0.3 setosa
#> 8 5.0 3.4 1.5 0.2 setosa
#> 9 4.4 2.9 1.4 0.2 setosa
#> 10 4.9 3.1 1.5 0.1 setosa
#> 141 6.7 3.1 5.6 2.4 virginica
#> 142 6.9 3.1 5.1 2.3 virginica
#> 143 5.8 2.7 5.1 1.9 virginica
#> 144 6.8 3.2 5.9 2.3 virginica
#> 145 6.7 3.3 5.7 2.5 virginica
#> 146 6.7 3.0 5.2 2.3 virginica
#> 147 6.3 2.5 5.0 1.9 virginica
#> 148 6.5 3.0 5.2 2.0 virginica
#> 149 6.2 3.4 5.4 2.3 virginica
#> 150 5.9 3.0 5.1 1.8 virginica
# Building unary functions with %>%
trig_fest <- . %>% tan %>% cos %>% sin
1:10 %>% trig_fest
#> [1] 0.0133878 -0.5449592 0.8359477 0.3906486 -0.8257855 0.8180174
#> [7] 0.6001744 0.7640323 0.7829771 0.7153150
trig_fest(1:10)
#> [1] 0.0133878 -0.5449592 0.8359477 0.3906486 -0.8257855 0.8180174
#> [7] 0.6001744 0.7640323 0.7829771 0.7153150
相關用法
- R magrittr pipe-eager 熱切的管子
- R magrittr exposition 展覽管
- R magrittr tee 三通管
- R magrittr compound 分配管道
- R matrix轉list用法及代碼示例
- R SparkR match用法及代碼示例
- R vcov.gam 從 GAM 擬合中提取參數(估計器)協方差矩陣
- R gam.check 擬合 gam 模型的一些診斷
- R as 強製對象屬於某個類
- R null.space.dimension TPRS 未懲罰函數空間的基礎
- R language-class 表示未評估語言對象的類
- R gam.reparam 尋找平方根懲罰的穩定正交重新參數化。
- R className 類名包含對應的包
- R modelr typical 求典型值
- R extract.lme.cov 從 lme 對象中提取數據協方差矩陣
- R scat 用於重尾數據的 GAM 縮放 t 係列
- R choldrop 刪除並排名第一 Cholesky 因子更新
- R smooth.construct.cr.smooth.spec GAM 中的懲罰三次回歸樣條
- R modelr resample “惰性”重采樣。
- R bandchol 帶對角矩陣的 Choleski 分解
- R BasicClasses 基本數據類型對應的類
- R gam.side GAM 的可識別性邊條件
- R cox.ph 附加 Cox 比例風險模型
- R callGeneric 從方法調用當前通用函數
- R mgcv.parallel mgcv 中的並行計算。
注:本文由純淨天空篩選整理自Stefan Milton Bache等大神的英文原創作品 Pipe。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。