7.1apply函数族2.lapply()函数(P144)lapply()函数是循环操作函数之一,用来对list类型、data.frame类型数据集进行循环,并返回和x长度同样的list结构作为结果数据集,它和apply()函数表面上的区别是以字母“I”开头,就可以判断lapply()函数和apply()函数主要区别在于返回结果数据集的类型。函数语法格式:lapply(X, FUN,...)参数列表:①X:list类型、data.frame类型的数据集合。②FUN:自定义函数。③·更多参数
7.1 apply函数族 2. lapply( )函数 (P144) lapply( )函数是循环操作函数之一,用来对list类型、data.frame类型数据集进行循环,并 返回和X长度同样的list结构作为结果数据集,它和apply( )函数表面上的区别是以字母“l” 开头,就可以判断lapply( )函数和apply( )函数主要区别在于返回结果数据集的类型。 函数语法格式: lapply(X, FUN, .) 参数列表: ① X:list类型、data.frame类型的数据集合。 ② FUN:自定义函数。 ③ .:更多参数
7.1apply函数族【例7-1】计算list中的每个key对应的数据的分位数。(P144)#分别计算每个KEY对应该的数据的分位数。#构建一个list数据集x,分别包括a,b,c三个key值>lapply(x,quantile)Sa>x<- list(a = 1:10, b = rnorm(6,6,2),C=C(TRUE,FALSE,FALSE,TRUE,FALSE)0%25%50%75%100%>x1.003.255.507.7510.00Sa$b[1] 1 2 3 4 5 6 7 8 9 100%25%50%75%100%$b4.2944095.1723347.4256098.38050310.430921[1] 4.685836 4.294409 6.6318308.219388Sc10.4309218.4342070%25%50%75%100%Sc00011[1]TRUEFALSEFALSETRUEFALSE
# 构建一个list数据集x,分别包括a,b,c三个key值。 > x <- list(a = 1:10, b = rnorm(6,6,2), c= c(TRUE,FALSE,FALSE,TRUE,FALSE)) > x $a [1] 1 2 3 4 5 6 7 8 9 10 $b [1] 4.685836 4.294409 6.631830 8.219388 10.430921 8.434207 $c [1] TRUE FALSE FALSE TRUE FALSE 【例7-1】计算list中的每个key对应的数据的分位数。(P144) 7.1 apply函数族 # 分别计算每个KEY对应该的数据的分位数。 > lapply(x,quantile) $a 0% 25% 50% 75% 100% 1.00 3.25 5.50 7.75 10.00 $b 0% 25% 50% 75% 100% 4.294409 5.172334 7.425609 8.380503 10.430921 $c 0% 25% 50% 75% 100% 0 0 0 1 1
7.1apply函数族【例7-2】对数据框的列求和。注意:>x<- cbind(x1 = 5, x2 = c(1:6))优点:lapply()函数可以很方便地把list数据集进行循>lapply(data.frame(x),sum)环操作,lapply)函数还可以用于对data.frame数据$x1集按列进行循环操作。[1] 30不足:但它不能像apply()函数那样对向量或矩阵对$x2象进行循环操作。[1]21
> x <- cbind(x1 = 5, x2 = c(1:6)) > lapply(data.frame(x), sum) $x1 [1] 30 $x2 [1] 21 【例7-2】对数据框的列求和。 7.1 apply函数族 注意: 优点:lapply( )函数可以很方便地把list数据集进行循 环操作,lapply( )函数还可以用于对data.frame数据 集按列进行循环操作。 不足:但它不能像apply( )函数那样对向量或矩阵对 象进行循环操作
7.1apply函数族3.sapply()函数(P145)sapply()函数与lapply()函数作用相似,sapply()函数只是在lapply()函数的基础上增加了simplify参数和USE.NAMES参数,主要就是优化了输出。Sapply()函数在simplify参数和USE.NAMES参数都使用默认值的时候返回值为向量,这是和lapply()函数的最大区别。函数语法格式:sapply(X,FUN,..,simplify=TRUE,USE.NAMES=TRUE)参数列表:①X:数组、矩阵、数据框。②FUN:自定义函数。③.:更多参数。④Simplify:是否数组化,默认值是TRUE,可以设置FALSE关闭数组化。比较特别的是它还有一个值是“array”,如果参数值设置为“array”,输出结果按数组进行分组。③USE.NAMES:默认值是TRUE,如果X的内容为字符串,那么如果没有名字就用X的内容中的字符传来命名,如果设置为FALSE则不去命名
7.1 apply函数族 3. sapply( )函数(P145) sapply( )函数与lapply( )函数作用相似,sapply( )函数只是在lapply( )函数的基础上增加了 simplify参数和USE.NAMES参数,主要就是优化了输出。Sapply( )函数在simplify参数和 USE.NAMES参数都使用默认值的时候返回值为向量,这是和lapply( )函数的最大区别。 函数语法格式: sapply(X, FUN, ., simplify=TRUE, USE.NAMES = TRUE) 参数列表: ① X:数组、矩阵、数据框。 ② FUN:自定义函数。 ③ .:更多参数。 ④ Simplify:是否数组化,默认值是TRUE,可以设置FALSE关闭数组化。比较特别的是它还 有一个值是“array”,如果参数值设置为“array”,输出结果按数组进行分组。 ⑤ USE.NAMES:默认值是TRUE,如果X的内容为字符串,那么如果没有名字就用X的内容 中的字符传来命名,如果设置为FALSE则不去命名
7.1apply函数族【例7-3】使用sapply()函数来完成矩阵,数据框的计算需求。>x<- cbind(x1 = 5,x2 = c(1:6))#对矩阵计算注意:> sapply(x, sum)[1]555555123456如果simplify=FALSE和USE.NAMES=FALSE,即simplify#对数据框计算参数和USE.NAMES参数不使用默认值,那么sapply()>sapply(data.frame(x),sum)x1x2函数就和lapply()函数一样了。3021>lapply(data.frame(x),sum)#检查结果类型,来取定sapply()函数返回类型为向量,而lapply()函数返回类型为list>sapply(data.frame(x),sum,simplify=F,USE.NAMES=F)#列表>class(lapply(x,sum))[1] "list"#返回类型都是列表!>class(sapply(x, sum)#数值向量[1]"numeric
> x <- cbind(x1 = 5, x2 = c(1:6)) # 对矩阵计算 > sapply(x, sum) [1] 5 5 5 5 5 5 1 2 3 4 5 6 # 对数据框计算 > sapply(data.frame(x), sum) x1 x2 30 21 # 检查结果类型,来取定sapply( )函数返回类型为向量,而 lapply( )函数返回类型为list > class(lapply(x, sum)) # 列表 [1] “list” > class(sapply(x, sum)) # 数值向量 [1] “numeric” 【例7-3】使用sapply( )函数来完成矩阵,数据框的计算需求。 7.1 apply函数族 注意: 如果simplify=FALSE和USE.NAMES=FALSE,即simplify 参数和USE.NAMES参数不使用默认值,那么sapply( ) 函数就和lapply( )函数一样了。 > lapply(data.frame(x) , sum) > sapply(data.frame(x), sum, simplify=F , USE.NAMES = F) # 返回类型都是列表!