使用magrittr 管道( %>%),我偶尔会将结果通过管道传递给多个参数,例如
ds <-
datasets::airquality |>
head()
ds %>%
# ds |>
knitr::kable(
x = .,
col.names = tolower(colnames(.)),
format = "markdown"
)
Run Code Online (Sandbox Code Playgroud)
结果:
| ozone| solar.r| wind| temp| month| day|
|-----:|-------:|----:|----:|-----:|---:|
| 41| 190| 7.4| 67| 5| 1|
| 36| 118| 8.0| 72| 5| 2|
| 12| 149| 12.6| 74| 5| 3|
| 18| 313| 11.5| 62| 5| 4|
| NA| NA| 14.3| 56| 5| 5|
| 28| NA| 14.9| 66| 5| 6|
Run Code Online (Sandbox Code Playgroud)
但R 的新原生管道(在 4.1.0 中引入|>)不支持这一点。替换为会引发此错误:%>%|>
Error in knitr::kable(head(datasets::airquality), x = ., col.names = tolower(colnames(.)), :
object '.' not found
Run Code Online (Sandbox Code Playgroud)
发行说明中的描述(我的重点):
R 现在提供简单的本机前向管道语法 |>。前向管道的简单形式将左侧插入作为右侧调用中的第一个参数。作为语法转换的管道实现是由 Jim Hester 和 Lionel Henry 的建议推动的。
除了定义一个新的(匿名或显式)函数来包装下面提出的 rhs(右侧)函数之外,是否还有另一种方法使用|>?
Jumping Rivers的博客介绍了如何使用匿名函数和新的本机管道 (a) 将值传递给不是第一个参数的参数,以及 (b) 将值传递给多个参数。对于上面的问题:
ds |>
{\(x)
knitr::kable(
x = x,
col.names = tolower(colnames(x)),
format = "markdown"
)
}() # Don't forget the parentheses.
Run Code Online (Sandbox Code Playgroud)
这利用了R 4.1.0 版本功能。
R 现在提供了用于创建函数的简写符号,例如 (x) x + 1 被解析为 function(x) x + 1。
它比显式定义函数要简洁一些,例如
kable2 <- function (x) {
knitr::kable(
x = x,
col.names = tolower(colnames(x)),
format = "markdown"
)
}
ds |>
kable2()
Run Code Online (Sandbox Code Playgroud)
注意:如果您收到以下错误,您可能忘记了定义匿名函数后的()(即左括号和右括号)。
错误:管道的 RHS 调用不支持函数“{”
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |