管道函数的优点

  • 省略不必要的中间变量,节省内存
  • 使用嵌套也可以省略中间变量,但是多重嵌套回影响对代码的阅读

原始文档说明

Package ‘magrittr’

简单使用方法

  1. 当函数只接收一个参数时,x %>% y 等价于 y(x)
  2. 函数接收多个参数时,默认传递给第一个位置,x %>% f(y) 等价于 f(x,y)
  3. 函数接收多个参数,且不在第一位置时,可用”.“来标定要传递的位置。y %>% f(x,.) 等价于 f(x,y)。z %>% f(x,y,arg=.) 等价于 f(x,y,arg=z) 。

进阶使用方法

示例如下

R 使用管道函数 - 图1

magrittr 的其他三个管道函数

%<>%

  1. iris$Sepal.Length %<>% sqrt
  2. x <- rnorm(100)
  3. x %<>% abs %>% sort
  4. is_weekend <- function(day)
  5. {
  6. # day could be e.g. character a valid representation
  7. day %<>% as.Date
  8. result <- day %>% format("%u") %>% as.numeric %>% is_greater_than(5)
  9. if (result)
  10. message(day %>% paste("is a weekend!"))
  11. else
  12. message(day %>% paste("is not a weekend!"))
  13. invisible(result)
  14. }

%$%

从前一个dataframe 或者 list 中直接索引对象,和 ”$“ 方法等价。

  1. iris %>%
  2. subset(Sepal.Length > mean(Sepal.Length)) %$%
  3. cor(Sepal.Length, Sepal.Width)
  4. data.frame(z = rnorm(100)) %$%
  5. ts.plot(z)

%T>%

这个就是 %>% 的 double 版,可以将参数同时传递给后面两个函数。

  1. rnorm(200) %>%
  2. matrix(ncol = 2) %T>%
  3. plot %>% # plot usually does not return anything.
  4. colSums