前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R中的管道操作符%>%

R中的管道操作符%>%

作者头像
生信编程日常
发布2020-04-01 15:55:14
1.4K0
发布2020-04-01 15:55:14
举报

管道是一种强大的工具,可以清楚地表示由多个操作组成的一个操作序列。管道%>% 来自于magrittr 包。因为tidyverse 中的包会自动加载%>%,所以一般我们不需要自己加载这个包。

代码语言:javascript
复制
library(magrittr)

有时候我们想实现某个功能,但是中间会有好几个步骤,产生不少无关变量。比如R数据科学中举的一个简单易懂的例子:

构建一个小兔子的对象:

代码语言:javascript
复制
foo_foo <- little_bunny()

兔子需要完成三个动作:

代码语言:javascript
复制
foo_foo_1 <- hop(foo_foo, through = forest)
foo_foo_2 <- scoop(foo_foo_1, up = field_mice)
foo_foo_3 <- bop(foo_foo_2, on = head)

在这个例子中,就产生了没有什么实际意义的中间变量,还必须用数字区分。这样很容易让人混淆,产生错误。

如果这样写:

代码语言:javascript
复制
foo_foo <- hop(foo_foo, through = forest)
foo_foo <- scoop(foo_foo, up = field_mice)
foo_foo <- bop(foo_foo, on = head)

每次都会覆盖掉以前的变量,但是这样如果出错,那么就必须重新跑。

有人可能也许会将函数组合起来:

代码语言:javascript
复制
bop(
scoop(
hop(foo_foo, through = forest),
up = field_mice
),
on = head
)

不过这样看起来真的累。

最后使用管道:

代码语言:javascript
复制
foo_foo %>%
hop(through = forest) %>%
scoop(up = field_mouse) %>%
bop(on = head)

管道对于一段比较短的线性操作序列是非常好使的,不过当步骤比较长(比如超过十个),或者有多个输入输出等时候,最好不要用管道。

举个简单小例子:

代码语言:javascript
复制
iris$Petal.Length %>%  `+` (10) %>% plot(col = 'steelblue', pch = 4)

取出来iris的Petal.Length一列,并+10,最后画图点图。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档