R管道操作%>%

文章来源:https://mp.weixin.qq.com/s?__biz=MzIwMDIwNTIyNQ==&mid=2247487424&idx=1&sn=63341e1d46df398466625b4d3de0dc1b&chksm=9681f906a1f67010af52cba35a1bf91454d35712192ce6d2ac46de7aa3a32ce9576fbdd4057b&token=1341954697&lang=zh_CN#rd

1.初识管道函数%>%

管道函数%>%来自于magrittr包,这是一个在R语言中使用非常频繁的函数,很多比较成熟的项目扩展包(如dplyr、rvest、leaflet等都实现了默认调用)都已经实现了管道操作函数的内置, %>%也支持Base R 函数。%>%的用法如下:



看得出来,%>%是将左边的对象传递给右边的函数,具体用法:

x %>% f等同于 f(x);
x %>% f(y)等同于 f(x,y);
y %>% f(x,.)等同于 f(x,y);
z %>% f(x,y,arg=.)等同于 f(x,y,arg=z)

使用管道的好处是:

(1)避免使用过多的中间变量;

(2)程序可读性大大增强

2.一些简单小例子

library(magrittr)

2.1基本用法

例子1
生成一个向量x,对x取对数,计算取对数后的迭代滞后差分,然后计算指数函数,最后把结果四舍五入。在不用%>%操作的时候可以这样写:

x <- c(0.109, 0.359, 0.63, 0.996, 0.515, 0.142, 0.017, 0.829, 0.907)
round(exp(diff(log(x))), 1)

使用管道后,代码更容易读懂:

x %>% log() %>%
  diff() %>%
  exp() %>%
  round(1)


例子2

iris %>% head
iris %>% head(10)

2.2使用点占位符

管道默认将输出传给下一个函数的第1个参数,若函数的第1个参数不是接受数据,需要手动放置"."占位符。
例子1

iris %>% plot(Sepal.Width~Petal.Width, data = .)

例子2

iris %>%
  subset(Sepal.Length > 5) %>%
  aggregate(. ~ Species, ., mean)#挑选出
#Sepal.Length > 5的变量,对其进行汇总:按照Species分类然后算出均数

例子3

sample(1:10) %>% paste0(LETTERS[.])

2.3管道中使用函数

例子1

iris %>%
  {
    size <- sample(1:10, size = 1)
    rbind(head(., size), tail(., size))
  }

例子2

iris %>%
  {
    my_data <- .
    size <- sample(1:10, size = 1)
    rbind(head(my_data, size), tail(my_data, size))
  }

3.辅助函数

可用 ?extract 查阅


如extract函数等价于 [,用于索引数据框中的列:

iiris %>% extract(,1:4) %>% head(5)  #等价于
iris %>% `[`(1:4)       %>% head(5)  #和
iris %>% .[,1:4]        %>% head(5)

4.其他的管道操作函数

其他的管道操作函数还包括:%<>%,%$%,%T>%,感兴趣的伙伴可以自行学习。

参考资料:

  1. https://cran.r-project.org/web/packages/magrittr/magrittr.pdf
  2. https://www.datacamp.com/community/tutorials/pipe-r-tutorial

你可能感兴趣的:(R管道操作%>%)