在本机管道中传递第二个或更高的参数

Sam*_*kel 11 r pipe

通过magrittr的 pipeline ( %>%) 这段代码可以工作;

library(dplyr)

set.seed(1)

a <- sample(LETTERS[1:30],5)

a %>% gsub('A','-',x = .)
Run Code Online (Sandbox Code Playgroud)

但在 R 的本机或“内置”管道中,我无法使用点进行管道传输,这个不起作用;

set.seed(1)

a <- sample(LETTERS[1:30],5)

a |> gsub('A','-',x = .)
Run Code Online (Sandbox Code Playgroud)

我们如何通过原生 R 管道传递非第一个参数?

Noa*_*oah 13

R 管道将提供的对象传递给第一个未命名参数。如果您命名其他参数,它将被正确传递。对于gsub(),这看起来如下:

a |> gsub(pattern = 'A', replacement = '-')
# "Y" "D" "G" "-" "B"
Run Code Online (Sandbox Code Playgroud)


Maë*_*aël 11

您可以使用本机管道的占位符_

a |> gsub('A','-', x = _)
#[1] "Y" "D" "G" "-" "B
Run Code Online (Sandbox Code Playgroud)

  • 使用“_”占位符,您需要传递将接收“_”占位符的参数名称。就像上面例子中的 `x = _` 一样。 (2认同)

Ice*_*can 5

如果您想将 LHS 传递给第一个未命名参数之外的其他参数,您可以使用匿名函数,只需将其设为函数调用即可。

set.seed(1)

a <- sample(LETTERS[1:30],5)

a |> (\(.) gsub('A', '-', x = .))()
#> [1] "Y" "D" "G" "-" "B"
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 1 月 5 日创建(v2.0.1)