Magrittr包:简化你的R代码

来源 | R友舍

1,R Coder的福音

Magrittr包实现了UNIX下的流式操作,即在R的编程环境下,也可以实现UNIX下的|管道符的操作,如下:
`> iris[,1:4] %>%

  • colSums`

得到如下结果:

Sepal.Length Sepal.Width Petal.Length Petal.Width 876.5 458.6 563.7 179.9

管道操作真的减少了代码量,节省时间,对于R CODER来说一个福音。再也不用没操作一次就赋值一个变量了。


2,下面简单介绍四种常用的管道操作:

  • %>%:

    • 常用的管道操作就是%>%了,见上面的例子。它的作用就是把当前操作的结果,传递给下一步,然后继续操作,继续传递……

    • 这个基本满足60%的R CODER的需求了吧。

  • %$%:

    • 当然,在特殊的情况下,比如生成新的变量,下一个操作需要用到变量的name,需要把这个变量传递下去,则需要%$%

    • 比如:
      data.frame(z = rnorm(100)) %$% ts.plot(z),这个地方,ts.plot()需要使用z这个name,所以需要把它传递下去,如果用%>%则不能实现这个功能。

  • %T%:

    • 在更特殊的情况下,比如Plot等函数不能产生数据的结果,比如在a->plot->c过程中,plot不传递数据给c,但是我们还想在C用a的数据,怎么办?

    • 这个时候下,就需要%T>%的操作符,如下:
      rnorm(200) %>% matrix(ncol = 2) %T>% plot %>% # plot usually does not return anything. colSums

  • %<>%:

    • 还有一种,是左边的数据可以被更新,如下: x <- rnorm(100) x %<>% abs %>% sort,从这个可以看到,x是经过了abssort之后的,最后的结果是排序后正的随机数。


3,管道操作后数据的调用

%T>%%$%可以使用变量以外,%>%之后的数据使用也很重要。使用.(dot)作为变量使用,比较方便,如下:

  • x %>% f is equivalent to f(x):

  • x %>% f(y) is equivalent to f(x, y):

  • y %>% f(x, .) is equivalent to f(x, y) and z %>% f(x, y, arg = .) is equivalent to f(x, y, arg = z):

  • 1:10 %>% {c(min(.), max(.))} is equivalent to c(min(1:10), max(1:10)).:

  • a %>% (function(x) x^2), and 1:10 %>% (call("sum"))

  • 还可以直接赋值新变量,比如 iris[1:4,] %>% { my_data <- . colSums(my_data) }

有了上述介绍的管道操作功能,基本就可以满足日常的数据的处理了。

640?wx_fmt=png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值