R语言 %>%操作符的作用

删除重复是代码中必须牢记的一个重要原则;然而,同样重要的是保持代码的效率和可读性。效率通常是通过利用代码中的函数和控制语句来实现的。

然而,效率还包括消除不必要对象的创建和保存,当您试图使您的代码更可读、更清晰和更明确时,这些对象常常会产生。因此,编写简单、可读和有效的代码常常被认为是矛盾的。由于这个原因,magrittr包是您的数据处理工具包中应该拥有的一个强大工具。

magrittr软件包由Stefan Milton Bache创建,用Stefan的话说,有两个主要目的:

因此,它旨在提高效率和提高可读性;在这个过程中,它极大地简化了您的代码。下面介绍了magrittr工具包的基础知识。


%>%操作符

magrittr包提供的主要函数为%>%,或者叫做“管道”操作(pipe operator)符。这个操作符将一个值或表达式的结果转发到下一个函数调用/表达式中。例如,过滤数据的函数可以写为:


filter(data, variable == numeric_value)

或:


data %>% filter(variable == numeric_value)

这两个函数都完成了相同的任务,使用%>% 的好处可能还没显现出来,然而,当执行多个函数时,它的优势就变得显而易见了。例如,如果我们想过滤一些数据,按类别分组、总结、然后对总结的结果排序,我们可以用三种不同的方式写出它:

1.嵌套


> arrange(
+     summarize(
+         group_by(
+             filter(mtcars, carb > 1),
+             cyl
+         ),
+         Avg_mpg = mean(mpg)
+     ),
+     desc(Avg_mpg)
+ )

# A tibble: 3 x 2
    cyl Avg_mpg
     
1     4    25.9
2     6    19.7
3     8    15.1

第一个选择是一个“嵌套”模型,这样函数就可以嵌套在另一个函数中。在历史上,这是集成代码的传统方式;然而,要读懂代码到底做了什么是极其困难的,而且在对代码进行更新时更容易出错。虽然没有违反DRY(Don’t repeat yourself )原则,但它确实违反了可读性和清晰性的基本原则,这使得你的分析的交流更加困难。为了使内容更具可读性,人们通常采用以下方法:


定义多个对象


> a <- filter(mtcars, carb > 1)
> b <- group_by(a, cyl)
> c <- summarise(b, Avg_mpg = mean(mpg))
> d <- arrange(c, desc(Avg_mpg))
> print(d)
# A tibble: 3 x 2
    cyl Avg_mpg
     
1     4    25.9
2     6    19.7
3     8    15.1

第二种选择有助于使数据争论步骤更加明确和明显,但肯定违反DRY原则。通过以这种方式对多个函数排序,您可能会保存多个对您或其他人来说信息不是很丰富的输出;相反,保存它们的唯一原因是将它们插入到下一个函数中,从而最终得到您想要的最终输出。这不可避免地会产生不必要的副本,并破坏正确管理对象……

为了提供相同的可读性(甚至更好),我们可以使用%>%将这些参数串在一起,而不需要创建不必要的对象…

% > %操作符


library(magrittr)
library(dplyr)

mtcars %>%
        filter(carb > 1) %>%
        group_by(cyl) %>%
        summarise(Avg_mpg = mean(mpg)) %>%
        arrange(desc(Avg_mpg))

# A tibble: 3 x 2
    cyl Avg_mpg
     
1     4    25.9
2     6    19.7
3     8    15.1

这个最后例子使用了%>%操作符,使得代码更高效、更清晰。它的效率在于它不保存不必要的对象(如例2)和执行效率(如例1和2),但使您的代码在过程中更具可读性。






公众号

关注公众号,获取一手资讯

“ R语言 %>%操作符的作用 ” comments 0

评论/回复

电子邮件地址不会被公开。 必填项已用*标注