R語言中的apply函數簇可以不通過for循環方式,實現對象迭代處理。可以有效提高運行效率。
包括:lapply、sapply、vapply、mapply、tapply、apply。
lapply
lapply接收一個向量和一個函數作爲函數。
lapply(list,FUN,…)
示例:
#x爲列表
x <- list(a=1:5,b=6:10,c=11:15)
#x
x
$a
[1] 1 2 3 4 5
$b
[1] 6 7 8 9 10
$c
[1] 11 12 13 14 15
#lapply函數
lapply(x, mean)
$a
[1] 3
$b
[1] 8
$c
[1] 13
sapply
類似於lapply,以向量形式返回。
sapply(list,FUN,…)
示例:
#列表
x <- list(a=1:5,b=6:10,c=11:15)
#spply函數
sapply(x, mean)
a b c
3 8 13
#結果同lapply,以向量形式返回。
vapply
vapply函數通過一個附加參數來設定每次迭代返回的模板。以模板定義返回。它是sapply函數的安全升級版。
vapply(list,FUN,FUN.VAlUE=type,…)
示例:
x <- list(a=1:5,b=6:10,c=11:15)
#指定模板返回數據類型爲數值型
vapply(x, mean,c(1))
a b c
3 8 13
mapply
lapply()和sapply()函數在一個向量上迭代。mapply可以實現多個向量的迭代。返回標量、多元素向量。
mapply(FUN,…)
示例:
x1 <- list(a = c(1:10), b = c(11:20))
x2 <- list(c = c(21:30), d = c(31:40))
#mapply函數
mapply(sum, x1$a, x1$b, x2$c, x2$d)
[1] 64 68 72 76 80 84 88 92 96 100
tapply
可以進行分組迭代。
tapply(X,index,FUN)
x爲向量,index爲向量索引,FUN爲函數。
#生成向量x
x <- c(10,25,26,30,35)
#建立x的索引
b <- c('A','B','A','B','A')
#按索引分組迭代求和
tapply(x, b, sum)
A B
71 55
apply
apply函數將一個函數應用到矩陣或數組的某個邊際(margin)或維度。
apply(x,margin,FUN)
參數 | 描述 |
---|---|
x | 矩陣或數組 |
margin | margin=1,指定行維度。margin=2,指定列維度。 |
FUN | 函數 |
示例:
#生成一個2行矩陣
x <- matrix(1:10,nrow = 2)
#矩陣
x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
#按行進行數據相加
apply(x, 1, sum)
#第一行總和25,第二行總和30
[1] 25 30
#按列進行數據相加
apply(x, 2, sum)
#依次展示5列數據相加的情況
[1] 3 7 11 15 19