R >4.1 语法:错误:管道的 RHS 调用不支持函数“function”

nev*_*ome 19 syntax r

R 4.1.0著名地引入了(“基管道”)运算|>符和类似 Haskell 的 lambda 函数语法。

我认为可以将两者结合起来,如下所示:

c(1, 2, 3) |> \(x) 2 * x
Run Code Online (Sandbox Code Playgroud)

这对我来说失败了:

错误:管道的 RHS 调用不支持函数“function”

因此我认为这不是有效的语法?这有效:

c(1, 2, 3) |> (\(x) 2 * x)()
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来链接管道和新的 lambda 函数?

von*_*njd 20

我认为最优雅的方式是使用花括号:

c(1, 2, 3) |> {\(x) 2 * x}()
Run Code Online (Sandbox Code Playgroud)

但这也有效:

c(1, 2, 3) |> (\(x) 2 * x)()
Run Code Online (Sandbox Code Playgroud)


Luc*_* Hu 11

这就是本机管道的限制。您只需在函数名称后包含 () 即可,这与 magrittr 不同。

# native pipe
foo |> bar()
# magrittr pipe
foo %>% bar
Run Code Online (Sandbox Code Playgroud)

也就是说,\(x) 2*x相当于旧的匿名函数语法function (x) 2*x,但与命名函数类似,在原生管道的RHS上使用时,必须包含()。

  • 我明白了 - 我希望有一个更简洁的语法,但我确信这些限制的存在是有原因的。 (3认同)