R 语言 管道操作符

本文介绍了R语言中管道操作符的使用,包括向右操作符 `%>%`、向左操作符 `%T>%`、解释操作符 `%$%` 和复合赋值操作符 `%<>%`,以及数据占位符和花括号的使用方法,帮助简化R语言编程并提高代码可读性。

背景

关于代码的简洁性,就是你使用了比较简化的高级操作符,但是有时候会增加代码的可读性。这种可读性在于你是否真正的去了解R的高级语法。你了解高级语法,他就不难,你不了解,他就难,可读性差。

这里我们来讲解一下,关于管道操作符,使R语言编程简化一些。

管道操作符

管道操作符来自于 magrittr ,所以首先要先安装 magrittr

> install.packages("magrittr")

2.1 抛砖引玉

首先,加载一个数据集 install.packages("gapminder"); library(gapminder)
在这里插入图片描述
我们现在进行如下操作:

  1. 取“gdpPercap”列
  2. 保留两位有效数字
  3. 取log2变换
  4. 对7取余
  5. 乘以2
  6. 绘制柱形图
> hist(log2(round(gapminder$gdpPercap, 2))%%7*2)

在这里插入图片描述
这种操作,往往由于忘记成对的括号,导致出现错误,或者写起来比较繁琐。
我们来写点简单的。

2.2 管道操作符

  • 当操作运算符的时候,使用单反引号
  • 当操作单个变量的时候,使用小括号
  • 当操作默认函数的时候,要带上函数的括号

2.2.1 向右操作符:%>%

  • 数据流,如下(就是把%>%左侧函数或表达式的结果输出作为%>%右侧的函数或者表达式的第一个数据输入的参数)
    在这里插入图片描述
  • 操作实例,如下
gapminder$gdpPercap %>% 
  round(2) %>%
  log2() %>%
  `%%` (7) %>%
  `*` (2) %>%
  hist(main="%>%")

在这里插入图片描述

2.2.2 向左操作:%T>%

  • 数据流,如下(使用%T>%,把左侧的函数或表达式的结果数据集A传递给右侧函数或表达式的B函数,B函数的结果数据集不再向右侧传递,而是把B左侧的结果数据集A再次向右传递给C函数,最后完成数据计算。)。
    在这里插入图片描述

假如我想在近一步的操作,同时进行:

  • 绘制柱形图
  • 对最后处理的数据进行求和
    如何进行操作?
gapminder$gdpPercap %>%
  round(2) %>%
  log2() %>%
  `%%` (7) %>%
  `*` (2) %T>%
  hist(main="%T>%") %>%
  sum %>%
  `/` (20)

在这里插入图片描述

2.2.3 解释操作符:%$%

  • 数据流,如下(%$% 的作用是把左侧数据及数据的属性名传给右侧,让右侧的调用函数直接通过名字,就可以获取左侧的数据(通过占位符代替左侧的数据)。比如,我们获得一个data.frame类型的数据集,通过使用 %$%,在右侧的函数中可以直接使用列名操作数据。)
    在这里插入图片描述
  • 实操实例,如下
    增加难度了!在前面,我们处理的结果都是输出了一个向量或者单个变量值。现在我想直接传递整个数据表,然后进行一些操作(当然,不采用该操作符,或许你有新的想法,期待你的回复)。

这里使用了占位符 .,下一节进行讲解

gapminder %$%
  round(.$gdpPercap, 2) %>%
  log2() %>%
  `%%` (7) %>%
  `*` (2) %T>%
  hist(main="%$%") %>%
  sum %>%
  `/` (20)

在这里插入图片描述
再比如,取x大于5的数据子集
在这里插入图片描述

2.2.4 复合赋值操作符:%<>%

%<>%复合赋值操作符, 功能与 %>% 基本是一样的,多了一项额外的操作,就是把结果写回到最左侧的对象(覆盖原来的值)。比如,我们需要对一个数据集进行排序,那么需要获得排序的结果,用%<>%就是非常方便的。

该操作符,必须位于第一个

在这里插入图片描述

示例1

在这里插入图片描述

示例2

在这里插入图片描述
在这里插入图片描述

2.3 占位符

2.3.1 数据占位符:点号 .

很多时候,我们使用的函数,数据输入的位置并不是第一个参数,或者放到函数需要放的位置。这类函数在管道符右边的时候,就需要一个占位符,指定前面(管道符左边)的输出该放在后面函数的哪个位置。

argument2 %>% function(argument1, .)
argument1 %>% function(argument2)

  • 实例
    在这里插入图片描述
    在这里插入图片描述

2.3.2 花括号:{}

先看两个实例
在这里插入图片描述
占位符不起作用了!!!!

  • stats::cor接受两个参数,我们想要的是.$lifeExp, .$gdpPercap,但是管道左边来的数据占了一个位置,并且还是个data.frame,自然就报错了,加上花括号 {},告诉管道符,我不想按照默认的,把左边的输出给右边,这样,stats::cor就只接受.$lifeExp, .$gdpPercap,正常运行。
  • 换句话说,%>%默认是将左侧的结果数据作为右侧的第一个参数;%$%默认是传递左侧的结果数据及数据的属性名(附带的数据),但是并没有将左侧的结果数据集作为右侧的第一个参数;{}可以使用更多的表达式。
  • 第一种解决办法:使用%$%+占位符
    在这里插入图片描述

  • 第二种解决办法:使用花括号{}
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值