apply函数族是R中用于数据处理的一组核心函数,apply函数族可以代替for循环从而执行各种数据处理功能,具体是哪种功能,要看其配合使用的函数类型。apply()可把函数应用到数组的某个维度上,而lapply()和sapply()则可将函数应用到列表上。
apply函数:
1.函数用途:是最常用的代替for循环的函数。apply函数可以对矩阵,数据框,数组,按行或按列进行循环计算,对子元素进行迭代,并把子元素以参数传递的形式给自定义的FUN函数中,并以返回计算结果。
2.函数语法:apply(x,MARGIN,FUN,...)
x:数组,矩阵,数据框
MARGIN:按行计算或按列计算,1表示按行,2表示按列。
FUN:自定义的调用函数
3.示例1:矩阵的每一行进行求和,用apply循环。
x <- matrix(1:12,ncol=3)#以3行4列填充一个矩阵
apply(x,1,sum)#对每一行进行求和计算
[1] 15 18 21 24
sort(apply(x,1,sum),decreasing = T)[1:3]#按行求和,降序,并只取前3个
[1] 24 21 18
lapply函数:
1.是一个最基础的循环操作函数之一,用来对list,data.frame数据集进行循环,并返回和x长度同样的list结构作为结果集,返回结果集的类型是list。
2.函数定义:
lapply(x,FUN,...)
x:list,data.frame数据
FUN:自定义的调用函数
3.示例:计算list中的每个KEY对应该数据的分位数。
x <- list(a=1:10,b=rnorm(6,10,5),c=c(TRUE,FALSE,FALSE,TRUE))
lapply(x,fivenum)#fivenum返回五个数据:最小值,下四分位数,中位数,上四分位数,最大值。
$a
[1] 1.0 3.0 5.5 8.0 10.0
$b
[1] 1.398005 3.244013 7.021981 11.085936 11.236533
$c
[1] 0.0 0.0 0.5 1.0 1.0
sapply函数:
1.sapply函数是一个简化版的lapply,sapply增加了2个参数simplify和USE.NAMES。主要是让输出看起来更友好,返回值为向量,而不是list对象。
2.函数定义:
sapply(x,FUN,...,simplify=TRUE,USE.NAMES=TRUE)
x:数组,矩阵,数据框
FUN:自定义的调用函数
simplify:是否数组化,当值array时,输出结果按数组进行分组
USE.NAMES:如果x为字符串,TRUE设置字符串为数据名,FALSE不设置。
3.示例1:
x <- cbind(x1=3,x2=c(2:1,4:5))
x
x1 x2
[1,] 3 2
[2,] 3 1
[3,] 3 4
[4,] 3 5
sapply(x,sum)
[1] 3 3 3 3 2 1 4 5
如果simplify=FALSE和USE.NAMES=FALSE,那么sapply函数就等于lapply函数了
lapply(data.frame(x), sum)
$x1
[1] 12
$x2
[1] 12
> sapply(data.frame(x), sum, simplify=FALSE, USE.NAMES=FALSE)
$x1
[1] 12
$x2
[1] 12
4.sapply()函数配合strsplit()函数进行取值
函数sapply()可以提取列表中每个成分的第n个元素,并将其放入向量中进行存储,"["是一个可以提取某个对象的一部分的函数。
y <- c("100-D","100-A","110-c","110-A")
z <- strsplit(y,"-")
sapply(z,"[",1)
[1] "100" "100" "110" "110"
sapply(z,"[",2)
[1] "D" "A" "c" "A"











网友评论