1. apply函數
對矩陣、數據框、數組(二維、多維)等矩陣型數據,按行或列應用函數FUN進行循環計算,并以返回計算結果
apply(X, MARGIN, FUN, ...)
X:數組、矩陣、數據框等矩陣型數據
MARGIN: 按行計算或按按列計算,1表示按行,2表示按列
FUN: 自定義的調用函數
應用iris數據集進行舉例,以下計算前四個變量的均值:
a <- apply(iris[,1:4], 2, mean) #前四列數據,按列,求均值
a
# 輸出
Sepal.Length? Sepal.Width Petal.Length? Petal.Width
? ? 5.843333? ? 3.057333? ? 3.758000? ? 1.199333
2. tapply函數
將數據按照不同方式分組,生成類似列聯表形式的數據結果
tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)
X:數組、矩陣、數據框等分割型數據向量
INDEX:一個或多個因子的列表,每個因子的長度都與x相同
FUN: 自定義的調用函數
manager <- c(1, 2, 3, 4, 5)
country <- c("US", "US", "UK", "UK", "UK")
gender <- c("M", "F", "F", "M", "F")
age <- c(32, 45, 25, 39, 99)
leadership <- data.frame(manager, country, gender, age)
tapply(leadership$age, leadership$country, mean) # 求在不同country水平下的age的均值
# 輸出
? ? ? UK? ? ? US
54.33333 38.50000
# 求在不同country和gender交叉水平下的age的均值, 輸出得到矩陣數據
tapply(leadership$age, list(leadership$country, leadership$gender), mean)
# 輸出
? ? F? M
UK 62 39
US 45 32
3. lapply函數
對列表、數據框數據集進行循環,輸入為列表,返回值為列表
lapply(X, FUN, ...)
X:列表、數據框
FUN:自定義的調用函數
b <- list(x = 1:10, y = matrix(1:12, 3, 4))
b
# 輸出
$x
[1]? 1? 2? 3? 4? 5? 6? 7? 8? 9 10
$y
? ? [,1] [,2] [,3] [,4]
[1,]? ? 1? ? 4? ? 7? 10
[2,]? ? 2? ? 5? ? 8? 11
[3,]? ? 3? ? 6? ? 9? 12
lapply(b, sum) # 求列表中各元素的和
# 輸出
$x
[1] 55
$y
[1] 78
4. sapply函數
類似于lapply函數,但輸入為列表,返回值為向量
sapply(X, FUN, ..., )
X:列表、矩陣、數據框
FUN:自定義的調用函數
sapply(b, sum) # 求列表中各元素的和
# 輸出
x? y
55 78
5. vapply函數
類似于sapply函數,但是可以預先指定返回值類型。
lapply(X, FUN, ...)
sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
vapply(X, FUN, FUN.VALUE, ..., USE.NAMES = TRUE)
vapply(b,sum,numeric(1))
這里的FUN.VALUE還可以用character(1),factor(1),etc
6. mapply函數
多參數版本的sapply。第一次計算傳入各組向量的第一個元素到FUN,進行結算得到結果;第二次傳入各組向量的第二個元素,得到結果;第三次傳入各組向量的第三個元素…以此類推。
l1<- list(a = c(1:10), b = c(11:20))
l2<- list(c = c(21:30), d = c(31:40))
mapply(sum, l1$a, l1$b, l2$c, l2$d)
文章來源:
https://blog.csdn.net/qq_43407763/article/details/91652918。
https://www.cnblogs.com/xihehe/p/7473981.html
在此基礎上補充修改。