gpt4 book ai didi

r - 管道结果到多个参数(使用 R 4.1+)

转载 作者:行者123 更新时间:2023-12-04 01:01:54 25 4
gpt4 key购买 nike

magrittr pipe ( %>% ),我偶尔会将结果通过管道传递给多个参数,例如

ds <- 
datasets::airquality |>
head()

ds %>%
# ds |>
knitr::kable(
x = .,
col.names = tolower(colnames(.)),
format = "markdown"
)
结果:
| 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|
但是 R's new native pipe ( |> , introduced in 4.1.0 ) 不支持这个。更换 %>%|>抛出这个错误:
Error in knitr::kable(head(datasets::airquality), x = ., col.names = tolower(colnames(.)),  : 
object '.' not found
release notes中的描述(我的重点):

R now provides a simple native forward pipe syntax |>. The simple form of the forward pipe inserts the left-hand side as the first argument in the right-hand side call. The pipe implementation as a syntax transformation was motivated by suggestions from Jim Hester and Lionel Henry.


除了定义一个新的(匿名或显式)函数来包装下面提出的 rhs(右侧)函数之外,还有另一种使用 |> 的方法吗? ?

最佳答案

Jumping Rivers的博客介绍了如何使用匿名函数和新的 native 管道 (a) 将值传递给不是第一个参数的参数,以及 (b) 将值传递给多个参数。对于上面的问题:

ds |>
{\(x)
knitr::kable(
x = x,
col.names = tolower(colnames(x)),
format = "markdown"
)
}() # Don't forget the parentheses.

这利用了 R 4.1.0 release特征。

R now provides a shorthand notation for creating functions, e.g. (x) x + 1 is parsed as function(x) x + 1.


它比明确定义函数要少一些冗长,例如
kable2 <- function (x) {
knitr::kable(
x = x,
col.names = tolower(colnames(x)),
format = "markdown"
)
}

ds |>
kable2()
备注 : 如果您收到以下错误,您可能忘记了 () (即,左括号和右括号)在匿名函数定义之后。

Error: function '{' not supported in RHS call of a pipe

关于r - 管道结果到多个参数(使用 R 4.1+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68071180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com