参考:https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/prog-control.html
类似linux 中的管道符号|
,R 也支持相关的操作。
数据处理中经常会对同一个变量(特别是数据框)进行多个步骤的操作, 比如,先筛选部分有用的变量,再定义若干新变量,再排序。 R的magrittr包提供了一个%>%
运算符实现这样的操作流程。 比如,变量x先用函数f(x)
进行变换,再用函数g(x)
进行变换, 一般应该写成g(f(x))
,用%>%运算符,可以表示成 x %>% f() %>% g()
。 更多的处理,如h(g(f(x)))可以写成 x %>% f() %>% g() %>% h()。 这样的表达更符合处理发生的次序,而且插入一个处理步骤也很容易。
除了%>%
管道外,magrittr
还提供了其他几种运算符:
x %T% f()
# 其返回x 本身的值,而非修改后的返回值
# 这在中间步骤需要显示或者绘图但是需要进一步对输入数据进行处理时有用
x %$% f()
# 此运算符的作用是将左运算元的各个变量(这时左运算元是数据框或列表)暴露出来,
# 可以直接在右边调用其中的变量,类似于with()函数的作用。
x %<>% f()
# 用在管道链的第一个连接,可以将处理结果存入最开始的变量中,
# 类似于C语言的+=运算符
# 相当于 x <- x %>% f()