管道函数的优点
- 省略不必要的中间变量,节省内存
- 使用嵌套也可以省略中间变量,但是多重嵌套回影响对代码的阅读
原始文档说明
简单使用方法
- 当函数只接收一个参数时,x %>% y 等价于 y(x)
- 函数接收多个参数时,默认传递给第一个位置,x %>% f(y) 等价于 f(x,y)
- 函数接收多个参数,且不在第一位置时,可用”.“来标定要传递的位置。y %>% f(x,.) 等价于 f(x,y)。z %>% f(x,y,arg=.) 等价于 f(x,y,arg=z) 。
进阶使用方法
示例如下
magrittr 的其他三个管道函数
%<>%
iris$Sepal.Length %<>% sqrt
x <- rnorm(100)
x %<>% abs %>% sort
is_weekend <- function(day)
{
# day could be e.g. character a valid representation
day %<>% as.Date
result <- day %>% format("%u") %>% as.numeric %>% is_greater_than(5)
if (result)
message(day %>% paste("is a weekend!"))
else
message(day %>% paste("is not a weekend!"))
invisible(result)
}
%$%
从前一个dataframe 或者 list 中直接索引对象,和 ”$“ 方法等价。
iris %>%
subset(Sepal.Length > mean(Sepal.Length)) %$%
cor(Sepal.Length, Sepal.Width)
data.frame(z = rnorm(100)) %$%
ts.plot(z)
%T>%
这个就是 %>% 的 double 版,可以将参数同时传递给后面两个函数。
rnorm(200) %>%
matrix(ncol = 2) %T>%
plot %>% # plot usually does not return anything.
colSums