【问题标题】:R >4.1 syntax: Error: function 'function' not supported in RHS call of a pipeR >4.1 语法:错误:管道的 RHS 调用中不支持函数“函数”
【发布时间】:2021-08-08 20:25:09
【问题描述】:

R 4.1.0 famously introduced |>(“基础管道”)运算符和类似 Haskell 的 lambda 函数语法。

我认为可以像这样将两者结合起来:

c(1, 2, 3) |> \(x) 2 * x

这对我来说失败了:

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

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

c(1, 2, 3) |> (\(x) 2 * x)()

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

【问题讨论】:

  • 这条推文在这里编译了管道如何与 lambda 函数结合的选项列表:twitter.com/bmwiernik/status/1398611489901121536?s=09
  • 这个设计决策的基本原理是什么? (即,鉴于解析器可以判断管道的 RHS 调用中有一个函数,为什么解析器不假设我们希望将函数应用于左侧,即使没有括号?)跨度>

标签: r syntax


【解决方案1】:

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

c(1, 2, 3) |> {\(x) 2 * x}()

【讨论】:

    【解决方案2】:

    这就是原生管道的局限性。你只需在函数名后面加上 (),这和 magrittr 不同。

    # native pipe
    foo |> bar()
    # magrittr pipe
    foo %>% bar
    

    也就是说\(x) 2*x等价于旧的匿名函数语法function (x) 2*x,但与命名函数类似, 在native pipe的RHS上使用时,必须包含()。

    【讨论】:

    • 我明白了 - 我希望语法更简洁,但我确信存在限制是有原因的。
    猜你喜欢
    • 1970-01-01
    • 2017-03-30
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2018-04-29
    • 2018-02-04
    • 2015-05-30
    相关资源
    最近更新 更多