美文网首页
70.关于pipe

70.关于pipe

作者: 心惊梦醒 | 来源:发表于2021-09-28 12:43 被阅读0次

【上一篇:69.关于编程技巧的提升开篇】
【下一篇:71.关于自定义函数的格式】

    %>%管道符来自magrittr包,当你加载tidyverse或者其中的包时,默认就加载了magrittr包,所以不需要显式加载它(即不需要写library(magrittr))。
    %>%管道符的数据流向永远还是从左到右:左边接收的数据是dataframe,相关函数也是基于dataframe上下文运算的,右边产生输出。
    magrittr包中还有其他的管道符工具:
    tee pipe:%T>%:这个管道符的作用是从左边输出结果。这个管道符在输出%>%数据流中的中间结果时很有用。Linux中tee这个命令的作用是接收标准输入中的内容并输出到一个文件中,所以这里的>左边的T可以理解为数据从左边输出。举个例子进行理解:

# 仅能输出图片
> rnorm(100) %>% matrix(ncol=2) %>% plot()
# 不仅可以输出图片,还能输出matrix(ncol=2)这一步运算的结果
> rnorm(100) %>% matrix(ncol=2) %T>% plot()
             [,1]        [,2]
 [1,] -0.87700992  1.39604385
 [2,]  1.58121476  1.65187233
 [3,]  1.12273586 -0.29236723
 [4,] -0.31387044 -0.01109105
 [5,]  0.59658100  1.82012854
 [6,]  0.13129411 -0.22548507
 [7,]  0.26499393  1.09355074
 [8,] -1.34242165  1.48584774
 [9,] -1.27116588  0.63586910
[10,]  0.63694253 -1.07387373

    %$%:这个管道符中有个$,$可以代表引用,所以这个管道符的作用是:打破数据框中的变量,以便可以单独引用数据框中的变量。举个例子理解:

# %>%的数据流是基于dataframe上下文环境工作的,cor()函数只能接收向量,不能接收数据框
> mtcars %>% cor(disp,mpg)
Error in cor(., disp, mpg) : invalid 'use' argument
In addition: Warning message:
In if (is.na(na.method)) stop("invalid 'use' argument") :
  the condition has length > 1 and only the first element will be used
# %$%可以让我们直接引用数据框中的变量
> mtcars %$% cor(disp,mpg)
[1] -0.8475514

    %<>%:覆盖原始数据管道符,举个例子:

> mtcars <-mtcars %>% transform(cyl=cyl*2)
# 下面这条命令可以代替上面这条
> mtcars %<>% transform(cyl=cyl*2)

    管道符很好用,但也不要滥用。代码以清晰、便于理解交流为主,当pipe中的步骤超过10步的时候尽量不要用管道符了;管道符比较适合输入只有一个的时候,当你有多个输入对象和输出的时候,也不要太勉强自己用管道符了,容易出错,得不偿失。

【上一篇:69.关于编程技巧的提升开篇】
【下一篇:71.关于自定义函数的格式】

相关文章

网友评论

      本文标题:70.关于pipe

      本文链接:https://www.haomeiwen.com/subject/zrstnltx.html