【问题标题】:What is the difference between %>% and %,% in magrittr?magrittr 中的 %>% 和 %,% 有什么区别?
【发布时间】:2014-10-02 09:41:19
【问题描述】:

Github 开发版的 magrittr 包含一些很酷的管道新功能,但我并没有完全理解 %>% 和 %,% 之间的区别。这只是正式的,%>% 用于价值,%,% 用于功能,还是有一些特定的特殊性?

【问题讨论】:

    标签: r piping magrittr


    【解决方案1】:

    正常的管道操作员是%>%。您可以使用%,% 创建可重用管道,即没有数据的管道。然后稍后您可以将同一管道用于各种数据集。这是一个例子。

    library(magrittr)
    library(dplyr)
    library(Lahman)
    

    假设您要根据总命中数计算前 5 名棒球运动员。然后你可以做这样的事情(取自 magrittr README):

    Batting %>%
       group_by(playerID) %>%
       summarise(total = sum(G)) %>%
       arrange(desc(total)) %>%
       head(5)
    # Source: local data frame [5 x 2]
    # 
    #    playerID total
    # 1  rosepe01  3562
    # 2 yastrca01  3308
    # 3 aaronha01  3298
    # 4 henderi01  3081
    # 5  cobbty01  3035
    

    到目前为止一切顺利。现在假设您有多个与Batting 格式相同的数据集,因此您可以再次重用相同的管道。 %,% 帮助您创建、保存和重复使用管道:

    top_total <- group_by(playerID) %,%
       summarise(total = sum(G)) %,%
       arrange(desc(total)) %,%
       head(5)
    
    top_total(Batting)
    # Source: local data frame [5 x 2]
    # 
    #    playerID total
    # 1  rosepe01  3562
    # 2 yastrca01  3308
    # 3 aaronha01  3298
    # 4 henderi01  3081
    # 5  cobbty01  3035
    

    当然你也可以用常规的 R 方式创建函数,即top_total &lt;- function(...) ...,但%,% 是一种更简洁的方式。

    【讨论】:

    • 确实,功能的方式是我以前使用的方式。谢谢!
    • 请注意,此功能从未进入 CRAN,现在使用 . 占位符:top_total &lt;- . %&gt;% group_by(playerID) %&gt;% summarise(total = sum(G)) %&gt;% arrange(desc(total)) %&gt;% head(5)
    猜你喜欢
    • 2021-08-10
    • 2019-06-04
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多