【R】magrittr - 4种管道操作符活用教程

1

什么是管道操作?

e70bab689ac63feefbf8fab290da6c8a.jpeg

举个栗子

#以R自带的iris数据为例

pacman::p_load(tidyverse, magrittr)
data <- iris

#顺序写法

data <- filter(data, Sepal.Length > 7) #筛选Sepal.Length > 7的行
data <- select(data, -Species) #剔除Species列
data <- map_df(data, mean) #求所有列均值

#函数嵌套写法

data <- map_df(select(filter(data, Sepal.Length > 7), -Species), mean)

#管道符写法

data %>% 
  filter(Sepal.Length > 7) %>% #筛选Sepal.Length > 7的行
  select(-Species) %>% #剔除Species列
  map_df(mean) #求所有列均值

几种写法的比较

    普通顺序写法下data变量被声明了6次,并每次都需要对data重新赋值。函数嵌套写法下data虽然被声明了2次,但其逻辑复杂,同时很难对指定函数去注释。

    管道符写法下data变量仅被声明1次,同时计算逻辑按行排列层层递进,更方便添加注释。

2

管道操作符讲解

1

%>% - 向右操作符

data %>% 
  filter(Sepal.Length > 7) %>% #筛选Sepal.Length > 7的行
  select(-Species) %>% #剔除Species列
  map_df(mean) #求所有列均值
  
  
# A tibble: 1 x 4
  Sepal.Length Sepal.Width Petal.Length Petal.Width
         <dbl>       <dbl>        <dbl>       <dbl>
1         7.48        3.12          6.3        2.05

 #把左侧准备的数据或表达式,传递给右侧的函数调用或表达式进行运行

2

%T>% - 向左操作符

data %>% 
  filter(Sepal.Length > 7) %>% 
  select(-Species) %T>%    #在这里!!!
  print() %>% 
  map_df(mean)
  


   Sepal.Length Sepal.Width Petal.Length Petal.Width
1           7.1         3.0          5.9         2.1
2           7.6         3.0          6.6         2.1
3           7.3         2.9          6.3         1.8
4           7.2         3.6          6.1         2.5
5           7.7         3.8          6.7         2.2
6           7.7         2.6          6.9         2.3
7           7.7         2.8          6.7         2.0
8           7.2         3.2          6.0         1.8
9           7.2         3.0          5.8         1.6
10          7.4         2.8          6.1         1.9
11          7.9         3.8          6.4         2.0
12          7.7         3.0          6.1         2.3
# A tibble: 1 x 4
  Sepal.Length Sepal.Width Petal.Length Petal.Width
         <dbl>       <dbl>        <dbl>       <dbl>
1         7.48        3.12          6.3        2.05

#插入到链条中的单独事件,不影响后续链条(运行并跳过)

#这里的 %T>% print() 可以理解为:

在对print函数的上一个函数的结果做print输出的同时

print函数的下一个函数代入值print的上一个函数的结果

3

%$% - 解释操作符

iris %$%
  str_detect(Species, "a") #查看iris内Species变量中每行是否包含“a”字符
  


 [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [20]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [39]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [58] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [77] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [96] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[115]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[134]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

#把左侧数据的变量名传给右侧,让右侧的调用函数直接通过变量名,就可以获取左侧的数据中对应的变量

4

%<>% - 复合赋值操作符

data %<>% 
  filter(Sepal.Length > 7) %>% 
  select(-Species) %>% 
  map_df(mean)


> data


# A tibble: 1 x 4
  Sepal.Length Sepal.Width Petal.Length Petal.Width
         <dbl>       <dbl>        <dbl>       <dbl>
1         7.48        3.12          6.3        2.05

# 将后续链条的结果回馈赋值给 %<>% 前的变量

### %<>% 必须要用在第一个管道的对象处,才能完成赋值的操作,如果不是左侧第一个位置,那么赋值将不起作用

最后

    管道操作符的使用,大幅度简化了代码复杂度的同时可以减少不必要的内存消耗。

    祝大家在管道中happy codingbb90d5a1d5dadffa73a5f78c97220e48.png

·END·

R语言与数据分析

生产力干货

1fa7441a8d1541c4e4eb4747aae111ca.jpeg

微信号:RforData
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言magrittr包提供了一些特殊的代码编程技巧,可以使R语言程序更简单、更高效。通过学习magrittr,我们可以使用一与传统的R语言代码有所不同的编程风格。 magrittr的设计理念是让代码更具可读性和易于理解,通过使用管道操作符 `%>%`,可以将多个函数串联起来,让代码更加流畅和简洁。这编程风格有助于减少中间变量的使用,简化代码的结构,提高代码的可维护性和可读性。 除了magrittr包,R语言还有许多其他强大的工具和创新,这些可以帮助我们更好地使用和理解R语言。例如,R的极客理想系列文章涵盖了R的思想、使用、工具和创新等方面的要点,通过个人的学习和体验,向我们展示了R语言的强大之处。 R语言作为一门统计学语言,在小众领域一直闪耀着光芒。但随着大数据的爆发,R语言变成了一门炙手可热的数据分析工具,并吸引了越来越多具有工程背景的人加入。现在不仅统计领域,教育、银行、电商、互联网等各个领域都在广泛使用R语言。这使得R语言的社区不断扩大和成长。 R语言的应用不断扩展,它已经成为许多领域中数据分析的首选工具之一。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [R语言高效的管道操作magrittr](https://blog.csdn.net/fens/article/details/84634612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值