美文网首页
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