最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年05月13日 11:22:33   作者:FTDdata  
大家在R語言數(shù)據(jù)處理中非常常見map(映射)與reduce(規(guī)約)操作,map表示映射,可以在一個(gè)或多個(gè)列表/向量的每個(gè)位置上應(yīng)用相同函數(shù)進(jìn)行計(jì)算而reduce函數(shù)表示規(guī)約,計(jì)算向量中相鄰的兩個(gè)元素,本文給大家介紹R語言map與reduce的相關(guān)知識(shí),感興趣的朋友一起看看吧

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

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

安裝包

install.packages('purrr')

map

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

map.png

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

# 加載包
library(purrr)
# 單個(gè)向量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ù)的結(jié)果來看,其返回與輸入向量等長(zhǎng)的結(jié)果,類型為列表

其他參數(shù)

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

# 單個(gè)向量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ù):

# 單個(gè)向量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ù)當(dāng)成一個(gè)公式傳入,這是purrr提供的高級(jí)功能,能夠簡(jiǎn)化代碼量。

  • 當(dāng)函數(shù)只有一個(gè)參數(shù)時(shí),公式函數(shù)中用.x代替參數(shù);
  • 當(dāng)函數(shù)有兩個(gè)參數(shù)時(shí),公式函數(shù)中用.x,.y代替參數(shù);
  • 當(dāng)函數(shù)有多個(gè)參數(shù)時(shí),公式函數(shù)中用..1,..2,..3代替參數(shù)。
# 單個(gè)向量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ù)的變形,映射對(duì)象有兩個(gè),需要注意兩個(gè)列表/向量的長(zhǎng)度必須相同

map2.png

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

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

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

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

pmap

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

pmap.png

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

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

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

# 多個(gè)向量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,map2pmap返回的數(shù)據(jù)格式都是列表,有時(shí)候需要對(duì)返回的結(jié)果進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,這時(shí)候可以直接使用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ù),直接返回?cái)?shù)據(jù)框格式。

# 返回?cái)?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:返回浮點(diǎn)數(shù)向量;
  • map_chr/map2_chr/pmap_chr:返回字符串向量。

reduce

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

reduce.png

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

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

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

reduce2

reduce2函數(shù)可以同時(shí)對(duì)兩個(gè)向量進(jìn)行規(guī)約計(jì)算,注意第二個(gè)向量長(zhǎng)度需要比第一個(gè)向量小1。

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

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

## [1] 7

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

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

以上就是淺析R語言中map與reduce的詳細(xì)內(nèi)容,更多關(guān)于R語言map與reduce的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • R語言中na.fail和na.omit的用法

    R語言中na.fail和na.omit的用法

    這篇文章主要介紹了R語言中na.fail和na.omit的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言本地安裝包圖文教程

    R語言本地安裝包圖文教程

    這篇文章主要介紹了R語言本地安裝包圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言操作X軸日期實(shí)例講解

    R語言操作X軸日期實(shí)例講解

    這篇文章主要介紹了R語言操作X軸日期實(shí)例講解,圖文描述的很清楚,有感興趣的同學(xué)可以研究下
    2021-03-03
  • vscode配置R語言debugger環(huán)境:'vscDebugger"的安裝方法

    vscode配置R語言debugger環(huán)境:'vscDebugger"的安裝方法

    在R中安裝vscDebugger包可以通過兩種方法:第一種是使用Visual Studio Code的命令面板自動(dòng)安裝,操作簡(jiǎn)便,第二種是手動(dòng)在R控制臺(tái)中安裝,這兩種方法都可以有效地安裝vscDebugger包,進(jìn)而幫助用戶在R語言中進(jìn)行代碼調(diào)試,更多詳細(xì)步驟和信息可以參考相關(guān)教程或文章
    2024-10-10
  • R語言實(shí)現(xiàn)廣義線性回歸模型

    R語言實(shí)現(xiàn)廣義線性回歸模型

    本文主要介紹了R語言實(shí)現(xiàn)廣義線性回歸模型,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • R語言入門教程之刪除指定數(shù)據(jù)的方法

    R語言入門教程之刪除指定數(shù)據(jù)的方法

    這篇文章主要介紹了R語言入門教程之刪除指定數(shù)據(jù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • R語言可視化ggplot2繪制24小時(shí)動(dòng)態(tài)血糖圖

    R語言可視化ggplot2繪制24小時(shí)動(dòng)態(tài)血糖圖

    這篇文章主要為大家介紹了R語言可視化使用ggplot2繪制24小時(shí)動(dòng)態(tài)血糖,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • R語言ggplot2x軸順序設(shè)置自定義顏色的操作

    R語言ggplot2x軸順序設(shè)置自定義顏色的操作

    這篇文章主要介紹了R語言ggplot2x軸順序設(shè)置自定義顏色的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 詳解R語言數(shù)據(jù)合并一行代碼搞定

    詳解R語言數(shù)據(jù)合并一行代碼搞定

    這篇文章主要介紹了詳解R語言數(shù)據(jù)合并一行代碼搞定,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • R語言編程數(shù)學(xué)分析重讀微積分理解極限算法

    R語言編程數(shù)學(xué)分析重讀微積分理解極限算法

    這篇文章主要為大家介紹了R語言編程重讀微積分?jǐn)?shù)學(xué)分析理解極限算法的詳細(xì)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10

最新評(píng)論

大荔县| 克什克腾旗| 固始县| 宜阳县| 天台县| 山阴县| 广南县| 丹阳市| 霍城县| 西华县| 曲松县| 山西省| 雅江县| 甘谷县| 扎兰屯市| 龙山县| 博客| 兴业县| 若尔盖县| 瓦房店市| 兴安县| 丰顺县| 洞口县| 杭州市| 溧阳市| 舒兰市| 久治县| 嘉善县| 佛学| 布尔津县| 许昌市| 东山县| 顺昌县| 佛教| 察隅县| 岑溪市| 金湖县| 松桃| 彰化县| 五华县| 新绛县|