R中的管道操作符%>%

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

library(magrittr)

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

构建一个小兔子的对象:

foo_foo <- little_bunny()

兔子需要完成三个动作:

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)

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

如果这样写:

foo_foo <- hop(foo_foo, through = forest)
foo_foo <- scoop(foo_foo, up = field_mice)
foo_foo <- bop(foo_foo, on = head)

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

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

bop(
scoop(
hop(foo_foo, through = forest),
up = field_mice
),
on = head
)

不过这样看起来真的累。

最后使用管道:

foo_foo %>%
hop(through = forest) %>%
scoop(up = field_mouse) %>%
bop(on = head)

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

举个简单小例子:

iris$Petal.Length %>%  `+` (10) %>% plot(col = 'steelblue', pch = 4)

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • https://github.com/hbctraining/Intro-to-R Tidyverse套件旨在共同...
    小洁忘了怎么分身阅读 6,500评论 -1 34
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,769评论 0 5
  • 很多人推荐《R语言实战》这本书来入门R,当然,这本书非常不错,我也是通过这本书开始接触的R。这种入门的学习路径属于...
    亮亮就是亮阅读 3,886评论 1 27
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 11,271评论 0 24
  • 这是系列分享文之:圣境藏地探秘 缘起: 近期重拾写字,治疗懒惰,这心念一开始闪动,缘就启动了。 去年认识两位朋友,...
    芳香行者Sunny阅读 767评论 0 1

友情链接更多精彩内容