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上使用时,必须包含()。