数据-R语言-图表-决策-Linux-Python

【tidyverse】part4:编程

2018-04-06  本文已影响36人  100gle

管道操作符magrittr包

pipes:管道操作符介绍

管道操作符用%>%来表示,可以使代码更加简洁并且减少写代码的工作量,并且减少内存的占用:

即使在别人阅读源代码时不知道%>%管道操作符的含义,也能清楚读懂每行代码起到的作用;
管道操作符表示一种「词的转译」,起到一种中介的作用;通过管道操作符将参数传递给下一个命令:

my_pipe <- function(.) {
 . <- hop(., through = forest) 
 . <- scoop(., up = field_mice)
 bop(., on = head)
} 
 my_pipe(foo_foo)

但是管道操作符对两类函数不起作用

assign('x', 10)
x

"x" %>% assign(100)
x

由于管道操作符是一种临时环境的命令,因此无法对当前运行环境起到作用;如果想管道操作符生效;则需要用到environment()函数来创建一个环境,然后通过envir=参数来起到作用:

env <- environment()
"x" %>% assign(100)
x

因为在R中,所有函数的参数仅在使用到它们时才会进行计算并调用,一般不会优先调用函数;但管道操作符则会计算每一个返回的元素,因此这就会产生一种错误

不使用管道操作符的情况

虽然管道操作符是一个有用的工具,但它并不能处理所有的问题;它仅适合用于重复输入并且在一系列的命令行中才会显现它的效力;但它仍然不适用以下情况:

magrittr包的其他工具

tidyverse包只提供基础的管道操作符,如果需要用到其他操作符,则需要另行加载magrittr包

使用管道操作符呈现出的结果如果不在最开始进行赋值的话,是不会将结果保存在当前运行内存中的,更有可能有的函数是不会返回任何东西;

因此,如果希望某行命令即通过管道操作符传递,又能展示出结果,可以使用「T操作符」%T>%;表示返回左边命令结果

diamonds %>% 
  filter(price, carat) %T>%
  ggplot(aes(carat, price))

如果希望能用管道操作符向R中的基础函数传递参数,可以使用%$%操作符,它表示探索的意思

#报错
mtcars %>% 
  cor(disp,mpg)
  
#正确显示结果
mtcars %$% 
  cor(disp,mpg)

上一篇下一篇

猜你喜欢

热点阅读