
R語(yǔ)言 apply函數(shù)家族詳解
apply {base}
通過(guò)對(duì)數(shù)組或者矩陣的一個(gè)維度使用函數(shù)生成值得列表或者數(shù)組、向量。
apply(X, MARGIN, FUN, …)
X 陣列,包括矩陣
MARGIN 1表示矩陣行,2表示矩陣列,也可以是c(1,2)
例:
>xxx<-matrix(1:20,ncol=4)
>apply(xxx,1,mean)
[1] 8.5 9.5 10.5 11.5 12.5
>apply(xxx,2,mean)
[1] 3 8 13 18
>xxx
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
lapply {base}
通過(guò)對(duì)x的每一個(gè)元素運(yùn)用函數(shù),生成一個(gè)與元素個(gè)數(shù)相同的值列表
lapply(X, FUN, …)
X表示一個(gè)向量或者表達(dá)式對(duì)象,其余對(duì)象將被通過(guò)as.list強(qiáng)制轉(zhuǎn)換為list
例:
> x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE))
> x
$a
[1] 1 2 3 4 5 6 7 8 9 10
$beta
[1] 0.04978707 0.13533528 0.36787944 1.00000000 2.71828183 7.38905610
[7] 20.08553692
$logic
[1] TRUE FALSE FALSE TRUE
> lapply(x,mean)
$a
[1] 5.5
$beta
[1] 4.535125
$logic
[1] 0.5
sapply {base}
這是一個(gè)用戶(hù)友好版本,是lapply函數(shù)的包裝版。該函數(shù)返回值為向量、矩陣,如果simplify=”array”,且合適的情況下,將會(huì)通過(guò)simplify2array()函數(shù)轉(zhuǎn)換為陣列。sapply(x, f, simplify=FALSE, USE.NAMES=FALSE)返回的值與lapply(x,f)是一致的。
sapply(X, FUN, …, simplify = TRUE, USE.NAMES = TRUE)
X表示一個(gè)向量或者表達(dá)式對(duì)象,其余對(duì)象將被通過(guò)as.list強(qiáng)制轉(zhuǎn)換為list
simplify 邏輯值或者字符串,如果可以,結(jié)果應(yīng)該被簡(jiǎn)化為向量、矩陣或者高維數(shù)組。必須是命名的,不能是簡(jiǎn)寫(xiě)。默認(rèn)值是TRUE,若合適將會(huì)返回一個(gè)向量或者矩陣。如果simplify=”array”,結(jié)果將返回一個(gè)陣列。
USE.NAMES 邏輯值,如果為T(mén)RUE,且x沒(méi)有被命名,則對(duì)x進(jìn)行命名。
例:
> sapply(k, paste,USE.NAMES=FALSE,1:5,sep=”…”)
[,1] [,2] [,3]
[1,] “a…1” “b…1” “c…1”
[2,] “a…2” “b…2” “c…2”
[3,] “a…3” “b…3” “c…3”
[4,] “a…4” “b…4” “c…4”
[5,] “a…5” “b…5” “c…5”
> sapply(k, paste,USE.NAMES=TRUE,1:5,sep=”…”)
a b c
[1,] “a…1” “b…1” “c…1”
[2,] “a…2” “b…2” “c…2”
[3,] “a…3” “b…3” “c…3”
[4,] “a…4” “b…4” “c…4”
[5,] “a…5” “b…5” “c…5”
> sapply(k, paste,USE.NAMES=TRUE,1:5,sep=”…”,simplyfy=TRUE)
a b c
[1,] “a…1…TRUE” “b…1…TRUE” “c…1…TRUE”
[2,] “a…2…TRUE” “b…2…TRUE” “c…2…TRUE”
[3,] “a…3…TRUE” “b…3…TRUE” “c…3…TRUE”
[4,] “a…4…TRUE” “b…4…TRUE” “c…4…TRUE”
[5,] “a…5…TRUE” “b…5…TRUE” “c…5…TRUE”
> sapply(k, paste,simplify=TRUE,USE.NAMES=TRUE,1:5,sep=”…”)
a b c
[1,] “a…1” “b…1” “c…1”
[2,] “a…2” “b…2” “c…2”
[3,] “a…3” “b…3” “c…3”
[4,] “a…4” “b…4” “c…4”
[5,] “a…5” “b…5” “c…5”
> sapply(k, paste,simplify=FALSE,USE.NAMES=TRUE,1:5,sep=”…”)
$a
[1] “a…1” “a…2” “a…3” “a…4” “a…5”
$b
[1] “b…1” “b…2” “b…3” “b…4” “b…5”
$c
[1] “c…1” “c…2” “c…3” “c…4” “c…5”
vapply {base}
vapply類(lèi)似于sapply函數(shù),但是它的返回值有預(yù)定義類(lèi)型,所以它使用起來(lái)會(huì)更加安全,有的時(shí)候會(huì)更快
在vapply函數(shù)中總是會(huì)進(jìn)行簡(jiǎn)化,vapply會(huì)檢測(cè)FUN的所有值是否與FUN.VALUE兼容,以使他們具有相同的長(zhǎng)度和類(lèi)型。類(lèi)型順序:邏輯<</span>整型<</span>實(shí)數(shù)<</span>復(fù)數(shù)
vapply(X, FUN, FUN.VALUE, …, USE.NAMES = TRUE)
X表示一個(gè)向量或者表達(dá)式對(duì)象,其余對(duì)象將被通過(guò)as.list強(qiáng)制轉(zhuǎn)換為list
simplify 邏輯值或者字符串,如果可以,結(jié)果應(yīng)該被簡(jiǎn)化為向量、矩陣或者高維數(shù)組。必須是命名的,不能是簡(jiǎn)寫(xiě)。默認(rèn)值是TRUE,若合適將會(huì)返回一個(gè)向量或者矩陣。如果simplify=”array”,結(jié)果將返回一個(gè)陣列。
USE.NAMES 邏輯值,如果為T(mén)RUE,且x沒(méi)有被命名,則對(duì)x進(jìn)行命名。
FUN.VALUE 一個(gè)通用型向量,F(xiàn)UN函數(shù)返回值得模板
例:
> x<-data.frame(a=rnorm(4,4,4),b=rnorm(4,5,3),c=rnorm(4,5,3))
> vapply(x,mean,c(c=0))
a b c
1.8329043 6.0442858 -0.1437202
> k<-function(x)
+ {
+ list(mean(x),sd(x))
+ }
> vapply(x,k,c(c=0))
錯(cuò)誤于vapply(x, k, c(c = 0)) : 值的長(zhǎng)度必需為1,
但FUN(X[[1]])結(jié)果的長(zhǎng)度卻是2
> vapply(x,k,c(c=0,b=0))
錯(cuò)誤于vapply(x, k, c(c = 0, b = 0)) : 值的種類(lèi)必需是‘double’,
但FUN(X[[1]])結(jié)果的種類(lèi)卻是‘list’
> vapply(x,k,c(list(c=0,b=0)))
a b c
c 1.832904 6.044286 -0.1437202
b 1.257834 1.940433 3.649194
tapply {base}
對(duì)不規(guī)則陣列使用向量,即對(duì)一組非空值按照一組確定因子進(jìn)行相應(yīng)計(jì)算
tapply(X, INDEX, FUN, …, simplify = TRUE)
x 一個(gè)原子向量,典型的是一個(gè)向量
INDEX 因子列表,和x長(zhǎng)度一樣,元素將被通過(guò)as.factor強(qiáng)制轉(zhuǎn)換為因子
simplify 若為FALSE,tapply將以列表形式返回陣列。若為T(mén)RUE,F(xiàn)UN則直接返回?cái)?shù)值
例:
> height <- c(174, 165, 180, 171, 160)
> sex<-c(“F”,”F”,”M”,”F”,”M”)
> tapply(height, sex, mean)
F M
170 170
eapply {base}
eapply函數(shù)通過(guò)對(duì)environment中命名值進(jìn)行FUN計(jì)算后返回一個(gè)列表值,用戶(hù)可以請(qǐng)求所有使用過(guò)的命名對(duì)象。
eapply(env, FUN, …, all.names = FALSE, USE.NAMES = TRUE)
env 將被使用的環(huán)境
all.names 邏輯值,指示是否對(duì)所有值使用該函數(shù)
USE.NAMES 邏輯值,指示返回的列表結(jié)果是否包含命名
例:
> require(stats)
>
> env <- new.env(hash = FALSE) # so the order is fixed
> env$a <- 1:10
> env$beta <- exp(-3:3)
> env$logic <- c(TRUE, FALSE, FALSE, TRUE)
> # what have we there?
> utils::ls.str(env)
a : int [1:10] 1 2 3 4 5 6 7 8 9 10
beta : num [1:7] 0.0498 0.1353 0.3679 1 2.7183 …
logic : logi [1:4] TRUE FALSE FALSE TRUE
>
> # compute the mean for each list element
> eapply(env, mean)
$logic
[1] 0.5
$beta
[1] 4.535125
$a
[1] 5.5
> unlist(eapply(env, mean, USE.NAMES = FALSE))
[1] 0.500000 4.535125 5.500000
>
> # median and quartiles for each element (making use of “…” passing):
> eapply(env, quantile, probs = 1:3/4)
$logic
25% 50% 75%
0.0 0.5 1.0
$beta
25% 50% 75%
0.2516074 1.0000000 5.0536690
$a
25% 50% 75%
3.25 5.50 7.75
> eapply(env, quantile)
$logic
0% 25% 50% 75% 100%
0.0 0.0 0.5 1.0 1.0
$beta
0% 25% 50% 75% 100%
0.04978707 0.25160736 1.00000000 5.05366896 20.08553692
$a
0% 25% 50% 75% 100%
1.00 3.25 5.50 7.75 10.00
mapply {base}
mapply是sapply的多變量版本。將對(duì)…中的每個(gè)參數(shù)運(yùn)行FUN函數(shù),如有必要,參數(shù)將被循環(huán)。
mapply(FUN, …, MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)
MoreArgs FUN函數(shù)的其他參數(shù)列表
SIMPLIFY 邏輯或者字符串,可以減少結(jié)果成為一個(gè)向量、矩陣或者更高維陣列,詳見(jiàn)sapply的simplify參數(shù)
USE.NAMES 邏輯值,如果第一個(gè)參數(shù)…已被命名,將使用這個(gè)字符向量作為名字
例:
> mapply(rep, 1:4, 4:1)
[[1]]
[1] 1 1 1 1
[[2]]
[1] 2 2 2
[[3]]
[1] 3 3
[[4]]
[1] 4
rapply {base}
rapply是lapply的遞歸版本
rapply(X, FUN, classes = “ANY”, deflt = NULL, how = c(“unlist”, “replace”, “l(fā)ist”), …)
X 一個(gè)列表
classes 關(guān)于類(lèi)名的字符向量,或者為any時(shí)則匹配任何類(lèi)
deflt 默認(rèn)結(jié)果,如果使用了how=”replace”,則不能使用
how 字符串匹配三種可能結(jié)果
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話(huà)題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶(hù)體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10