一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - R語言 - 淺析R語言中map(映射)與reduce(規(guī)約)

淺析R語言中map(映射)與reduce(規(guī)約)

2022-01-17 15:46FTDdata R語言

大家在R語言數(shù)據(jù)處理中非常常見map(映射)與reduce(規(guī)約)操作,map表示映射,可以在一個或多個列表/向量的每個位置上應用相同函數(shù)進行計算而reduce函數(shù)表示規(guī)約,計算向量中相鄰的兩個元素,本文給大家介紹R語言map與reduce的相關知

map(映射)與reduce(規(guī)約)操作在數(shù)據(jù)處理中非常常見,R語言的核心是向量化操作,自帶的apply系列函數(shù)完成了數(shù)據(jù)框的向量化計算,而purrr包中的map與reduce系列函數(shù)很好的拓展了向量化計算,使R語言處理數(shù)據(jù)更加優(yōu)雅流暢。

purrr包是tidyverse系列中的包,開發(fā)者是大名鼎鼎的Hadley Wickham。purrr包中的函數(shù)很多,使用最多的是map與reduce系列函數(shù)。

安裝包

install.packages('purrr')

map

map表示映射,可以在一個或多個列表/向量的每個位置上應用相同函數(shù)進行計算。map函數(shù)的映射對象只有一個。

淺析R語言中map(映射)與reduce(規(guī)約)

map(.x, .f, …)
.x: 列表或向量;
.f: 映射函數(shù);
...: 映射函數(shù)的其他參數(shù)

# 加載包
library(purrr)
# 單個向量map
1:4 %>%
map(rnorm)
## [[1]]
## [1] 0.1892454
## 
## [[2]]
## [1] -1.149757  1.782667
## 
## [[3]]
## [1] 0.9311241 0.5962078 0.8575180
## 
## [[4]]
## [1]  1.2708588  0.7957794 -0.0106283  0.5393979

從map函數(shù)的結果來看,其返回與輸入向量等長的結果,類型為列表

其他參數(shù)

可以指定映射函數(shù)的其他參數(shù):

# 單個向量map,指定函數(shù)參數(shù)
1:4 %>%
map(rnorm,mean=1,sd=2)
## [[1]]
## [1] 1.610763
## 
## [[2]]
## [1] -0.4034499  1.5814313
## 
## [[3]]
## [1] 2.806429 1.719962 2.005490
## 
## [[4]]
## [1] 2.170663 2.849836 1.085069 4.130320

匿名函數(shù)

傳入的函數(shù)可以是匿名函數(shù):

# 單個向量map,使用匿名函數(shù)
1:4 %>%
map(function(x) rnorm(x))
## [[1]]
## [1] 0.01422782
## 
## [[2]]
## [1] 1.7895586 0.7135593
## 
## [[3]]
## [1]  0.0603224  1.0498781 -1.0028828
## 
## [[4]]
## [1]  0.2673761 -1.1297717  0.7769814  1.5304043

公式函數(shù)

還可以把函數(shù)當成一個公式傳入,這是purrr提供的高級功能,能夠簡化代碼量。

  • 當函數(shù)只有一個參數(shù)時,公式函數(shù)中用.x代替參數(shù);
  • 當函數(shù)有兩個參數(shù)時,公式函數(shù)中用.x,.y代替參數(shù);
  • 當函數(shù)有多個參數(shù)時,公式函數(shù)中用..1,..2,..3代替參數(shù)。
# 單個向量map,使用公式函數(shù)
1:4 %>%
map(~rnorm(.x))
## [[1]]
## [1] -1.471681
## 
## [[2]]
## [1] -0.04243286 -0.68348293
## 
## [[3]]
## [1]  1.613470 -0.750001 -1.278718
## 
## [[4]]
## [1]  0.9369563 -0.5285622  0.8601058  1.8868754

map2

map2函數(shù)是map函數(shù)的變形,映射對象有兩個,需要注意兩個列表/向量的長度必須相同

淺析R語言中map(映射)與reduce(規(guī)約)

map2(.x,.y, .f, …)
.x: 列表或向量;
.y: 列表或向量,與.x等長;
.f: 映射函數(shù);
...: 映射函數(shù)的其他參數(shù)

# 兩個向量map
map2(1:3,2:4,sum)
## [[1]]
## [1] 3
## 
## [[2]]
## [1] 5
## 
## [[3]]
## [1] 7

用公式函數(shù)的方式:

# 兩個向量map,使用公式函數(shù)
map2(1:3,2:4,~sum(.x,.y))
## [[1]]
## [1] 3
## 
## [[2]]
## [1] 5
## 
## [[3]]
## [1] 7
# 兩個向量map,使用公式函數(shù)
map2(1:3,2:4,~sum(..1,..2))
## [[1]]
## [1] 3
## 
## [[2]]
## [1] 5
## 
## [[3]]
## [1] 7

pmap

pmap函數(shù)是map函數(shù)的變形,映射對象為多個,需要注意多個列表/向量的長度必須相同

淺析R語言中map(映射)與reduce(規(guī)約)

pmap(.l, .f, …)
.l: 列表向量/列表;
.f: 映射函數(shù);
...: 映射函數(shù)的其他參數(shù)

# 多個向量map
pmap(list(1:3,2:4,3:5),sum)
## [[1]]
## [1] 6
## 
## [[2]]
## [1] 9
## 
## [[3]]
## [1] 12

用公式函數(shù)的方式:

# 多個向量map,使用公式函數(shù)
pmap(list(1:3,2:4,3:5),~sum(..1,..2,..3))
## [[1]]
## [1] 6
## 
## [[2]]
## [1] 9
## 
## [[3]]
## [1] 12

map變形

map,map2和pmap返回的數(shù)據(jù)格式都是列表,有時候需要對返回的結果進行數(shù)據(jù)格式轉換,這時候可以直接使用map系列的變形函數(shù),直接一步完成。

# 返回列表
map(mtcars,mean)
## $mpg
## [1] 20.09062
## 
## $cyl
## [1] 6.1875
## 
## $disp
## [1] 230.7219
## 
## $hp
## [1] 146.6875
## 
## $drat
## [1] 3.596563
## 
## $wt
## [1] 3.21725
## 
## $qsec
## [1] 17.84875
## 
## $vs
## [1] 0.4375
## 
## $am
## [1] 0.40625
## 
## $gear
## [1] 3.6875
## 
## $carb
## [1] 2.8125

使用map_df函數(shù),直接返回數(shù)據(jù)框格式。

# 返回數(shù)據(jù)框
map_df(mtcars,mean)
## # A tibble: 1 x 11
##     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1  20.1  6.19  231.  147.  3.60  3.22  17.8 0.438 0.406  3.69  2.81
# 返回字符向量
map_chr(mtcars,mean)
##          mpg          cyl         disp           hp         drat           wt 
##  "20.090625"   "6.187500" "230.721875" "146.687500"   "3.596563"   "3.217250" 
##         qsec           vs           am         gear         carb 
##  "17.848750"   "0.437500"   "0.406250"   "3.687500"   "2.812500"

其他的有:

  • map_lgl/map2_lgl/pmap_lgl:返回邏輯向量;
  • map_int/map2_int/pmap_int:返回整數(shù)向量;
  • map_dbl/map2_dbl/pmap_dbl:返回浮點數(shù)向量;
  • map_chr/map2_chr/pmap_chr:返回字符串向量。

reduce

reduce函數(shù)表示規(guī)約,計算向量中相鄰的兩個元素,結果再與第三個元素計算,…,最后計算出一個值。

淺析R語言中map(映射)與reduce(規(guī)約)

reduce(.x, .f, …)
.x: 列表向量/列表;
.f: 規(guī)約函數(shù);
...: 函數(shù)的其他參數(shù)

# 單個向量reduce
reduce(1:5,paste)

## [1] "1 2 3 4 5"

reduce2

reduce2函數(shù)可以同時對兩個向量進行規(guī)約計算,注意第二個向量長度需要比第一個向量小1

reduce2(.x, .y,.f, …)
.x: 列表向量/列表;
.y: 列表向量/列表,長度比.x小1;
.f: 規(guī)約函數(shù);
...: 函數(shù)的其他參數(shù)

# 多個向量reduce
reduce2(1:4,c(1,1,1),function(x,y,z) x+y-z)

## [1] 7

計算邏輯為第一次:1+2-1=2,第二次2+3-1=4,第三次4+4-1=7。

更多的purrr包中函數(shù)用法,可以參考:cheatsheet

以上就是淺析R語言中map與reduce的詳細內(nèi)容,更多關于R語言map與reduce的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/jhr112/article/details/115379449

延伸 · 閱讀

精彩推薦
  • R語言R語言常量知識點總結

    R語言常量知識點總結

    在本篇文章里小編給大家整理了一篇關于R語言常量知識點總結內(nèi)容,有興趣的朋友們可以學習分享下。...

    R語言教程網(wǎng)12102021-12-29
  • R語言R語言讀取xls與xlsx格式文件過程

    R語言讀取xls與xlsx格式文件過程

    這篇文章主要為大家介紹了使用R語言讀取xls與xlsx格式文件的過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪...

    Kanny廣小隸11982022-01-20
  • R語言R語言實現(xiàn)支持向量機SVM應用案例

    R語言實現(xiàn)支持向量機SVM應用案例

    本文主要介紹了R語言實現(xiàn)支持向量機SVM應用案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一天_pika5222022-01-18
  • R語言R語言中qplot()函數(shù)的用法說明

    R語言中qplot()函數(shù)的用法說明

    這篇文章主要介紹了R語言中qplot()函數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    Jack_丁明12752022-01-05
  • R語言R語言中的vector(向量),array(數(shù)組)使用總結

    R語言中的vector(向量),array(數(shù)組)使用總結

    這篇文章主要介紹了R語言中的vector(向量),array(數(shù)組)使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    A葉子葉來5772021-11-14
  • R語言R語言gsub替換字符工具的具體使用

    R語言gsub替換字符工具的具體使用

    這篇文章主要介紹了R語言gsub替換字符工具的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    lztttao10372021-12-24
  • R語言如何用R語言繪制散點圖

    如何用R語言繪制散點圖

    這篇文章主要介紹了如何用R語言繪制散點圖,幫助大家更好的理解和學習使用R語言,感興趣的朋友可以了解下...

    菜鳥教程13002021-12-23
  • R語言基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    這篇文章主要介紹了基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    truffle52815052022-01-05
主站蜘蛛池模板: 午夜香蕉成视频人网站高清版 | 亚洲一区二区日韩欧美gif | 国产福利微拍精品一区二区 | 特黄特色大片免费视频播放 | 久久99热狠狠色一区二区 | 青青青久久久 | 亚欧美色 | 色综合色狠狠天天久久婷婷基地 | 草莓污污 | 国色天香社区在线视频播放 | 插入影院| 九色PORNY真实丨国产大胸 | 午夜无码片在线观看影院 | 日产2021免费一二三四区 | 久久无码AV亚洲精品色午夜麻豆 | 日本高清在线看 | 久久99精国产一区二区三区四区 | 国产9191精品免费观看 | 久久青青草原精品国产软件 | 日韩欧美一区二区三区四区 | 午夜视频一区二区三区 | 小舞丝袜调教喷水沦为肉奴 | 日韩成人一区ftp在线播放 | 福利国产精品 | 久久伊人精品青青草原2021 | 色婷婷天天综合在线 | 思思玖玖 | 亚洲国产第一 | 久久黄视频 | 91在线播| naruto堂同人本子汉化gg | 国产精品资源站 | 国产成人精品曰本亚洲77美色 | 5g影院天天5g天天爽大陆 | 免费视频完整版在线观看网站 | 日本不卡在线一区二区三区视频 | 美女扒开胸罩露出胸大乳 | 欧美亚洲第一区 | 久久九九有精品国产23百花影院 | 日本暖暖在线视频 | 国产精品高清一区二区三区不卡 |