背景
关于代码的简洁性,就是你使用了比较简化的高级操作符,但是有时候会增加代码的可读性。这种可读性在于你是否真正的去了解R的高级语法。你了解高级语法,他就不难,你不了解,他就难,可读性差。
这里我们来讲解一下,关于管道操作符,使R语言编程简化一些。
管道操作符
管道操作符来自于 magrittr ,所以首先要先安装 magrittr。
> install.packages("magrittr")
2.1 抛砖引玉
首先,加载一个数据集 install.packages("gapminder"); library(gapminder)。

我们现在进行如下操作:
- 取“gdpPercap”列
- 保留两位有效数字
- 取log2变换
- 对7取余
- 乘以2
- 绘制柱形图
> 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,正常运行。
- 换句话说,
%>%默认是将左侧的结果数据作为右侧的第一个参数;%$%默认是传递左侧的结果数据及数据的属性名(附带的数据),但是并没有将左侧的结果数据集作为右侧的第一个参数;{}可以使用更多的表达式。
-
第一种解决办法:使用
%$%+占位符

-
第二种解决办法:使用花括号
{}




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

被折叠的 条评论
为什么被折叠?



