R语言中apply函数家族
来源:互联网 发布:云杉网络 nsp 编辑:程序博客网 时间:2024/06/04 18:19
apply
简单说明:对数组或者矩阵的一个维度使用函数生成值得到列表或者数组、向量。
语法规则:apply(X, MARGIN, FUN, ...)简单释义:X:阵列,包括矩阵MARGIN:1表示矩阵行,2表示矩阵列,也可以是c(1,2)FUN:自定义函数
示例:
#构建4*5的矩阵,按行排列mat<-matrix(data = 1:20,nrow = 4,byrow = T)#计算矩阵每列的均值apply(X = mat,MARGIN = 1,FUN = mean)
结果:
[1] 3 8 13 18
lapply
简单说明:通过对x的每一个元素运用函数,生成一个与元素个数相同的值列表。
语法规则:lapply(X, FUN, ...)简单释义:X:表示一个向量或者表达式对象,其余对象将被通过as.list强制转换为list
示例:
x<-list(a=1:20,b=exp(-3:3),c=c(T,T,F,F,T))#获取列表中每个元素的长度lapply(x,FUN = length)
结果:
$a[1] 20$b[1] 7$c[1] 5
sapply
简单说明:用户友好版本,是lapply函数的包装版,该函数返回结果是向量或者矩阵,如果simplify=“array”,且合适的情况下,将会通过simplify2array()函数转换为阵列。
语法规则:sapply(X, FUN, ..., simplify = TRUE, USE.NAMES =TRUE)简单释义:X:向量或者表达式对象,其余对象将会通过as.list强制转换为listsimplify:逻辑值或者字符串,默认值为TRUE,若合适将返回一个向量或者矩阵,如果simply="array",结果将返回一个阵列。USE.NAMES为逻辑值,如果为TRUE,且x没有被命名,则对x进行命名。
示例:
#查看iris数据集的模式和类sapply(iris,mode)sapply(iris,class)#命名k<-c('a','b','c')sapply(k,FUN = paste,simplify = F,USE.NAMES = F,1:5)
结果:
> sapply(iris,mode)Sepal.Length Sepal.Width Petal.Length Petal.Width Species "numeric" "numeric" "numeric" "numeric" "numeric" > sapply(iris,class)Sepal.Length Sepal.Width Petal.Length Petal.Width Species "numeric" "numeric" "numeric" "numeric" "factor" > k<-c('a','b','c')> sapply(k,FUN = paste,simplify = F,USE.NAMES = F,1:5)[[1]][1] "a 1" "a 2" "a 3" "a 4" "a 5"[[2]][1] "b 1" "b 2" "b 3" "b 4" "b 5"[[3]][1] "c 1" "c 2" "c 3" "c 4" "c 5"
vapply
简单说明:和sapply函数类似,但是返回值有预定义类型,使用起来更加安全。
语法规则:vapply(X, FUN, FUN.VALUE, ..., USE.NAMES = TRUE)简单释义:X:向量或者表达式对象,其余对象将被通过as.list强制转换为listFUN.VALUE:一个通用型向量,FUN函数返回值的模板simplify:逻辑值或者字符串,结果应该被简化为向量、矩阵或者高维数组。必须是命名的,不能是简写。默认值是TRUE,若合适将会返回一个向量或者矩阵。如果simplify="array",结果将返回一个阵列。USE.NAMES:逻辑值,如果为TRUE,且x没有被命名,则对x进行命名。
示例:
#构建数据框dat<-data.frame(a=rnorm(100,1,2),b=rnorm(100,1,1),c=rnorm((100,1,3)))#计算数据框中每个向量的均值vapply(dat,mean,FUN.VALUE = c(mean=0))#自定义函数计算均值和标准差FUN<-function(x){ list(mean(x),sd(x))}vapply(dat,FUN,FUN.VALUE = list(mean=0,sd=0))
结果:
> dat<-data.frame(a=rnorm(100,1,2),b=rnorm(100,1,1),c=rnorm(100,1,3))> vapply(dat,mean,FUN.VALUE = c(mean=0)) a b c 0.8872571 1.0363621 0.9981886 > > FUN<-function(x){+ list(mean(x),sd(x))+ }> vapply(dat,FUN,FUN.VALUE = list(mean=0,sd=0)) a b c mean 0.8872571 1.036362 0.9981886sd 1.900742 0.8051695 3.141448
tapply
简单说明:对不规则阵列使用向量,即对一组非空值按照一组确定因子进行相应计算。
语法规则:tapply(X, INDEX, FUN, ..., simplify = TRUE)简单释义:x:是一个向量INDEX:因子列表,和x长度一样,元素将被通过as.factor强制转换为因子
示例:
age<-c(60,54,86,47,58,86)sex<-c("M","M","F","M","M","F")tapply(age, sex,FUN = mean)
结果:
F M 86.00 54.75
mapply
简单说明:是sapply的多变量版本。将对…中的每个参数运行FUN函数,如有必要,参数将被循环。该函数的第一个参数为指定的函数,第二个参数为指定函数的参数。
语法规则:mapply(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE,USE.NAMES = TRUE)简单释义:MoreArgs:FUN函数的其他参数列表SIMPLIFY:逻辑或者字符串,可以减少结果成为一个向量、矩阵或者更高维阵列USE.NAMES:逻辑值,如果第一个参数...已被命名,将使用这个字符向量作为名字
示例:
#针对1 2 3 4分别重复4 3 2 1次mapply(FUN = rep,1:4,4:1)#寻找字符串中字母和数值紧密相连的字符并截取char<-c("d12jsfl","df13djklf","sd5jglkjg","djf2dlk")result<-gregexpr(pattern = '[a-z][0-9]',char)fun<-function(x,y){ substring(x,y,y+attr(y,'match.length')-1)}mapply(fun,char,result)
结果:
> mapply(FUN = rep,1:4,4:1)[[1]][1] 1 1 1 1[[2]][1] 2 2 2[[3]][1] 3 3[[4]][1] 4> char<-c("d12jsfl","df13djklf","sd5jglkjg","djf2dlk")> result<-gregexpr(pattern = '[a-z][0-9]',char)> fun<-function(x,y){+ substring(x,y,y+attr(y,'match.length')-1)+ }> mapply(fun,char,result) d12jsfl df13djklf sd5jglkjg djf2dlk "d1" "f1" "d5" "f2"
总结:
apply()的被分析对象必须且只能是矩阵或数组tapply()的被分析对象必须且只能是向量sapply()的被分析对象必须且只能是向量或列表lapply()的被分析对象必须且只能是向量或列表vapply()的被分析对象必须且只能是向量或列表mapply()的被分析对象必须是函数
声明:
本博文始发于微信公众号:砍柴问樵夫
想了解更多内容请关注:
1 0
- R语言中apply函数家族
- #R#R语言apply函数家族
- R语言 apply函数家族详解
- R语言 apply函数家族详解
- R语言 apply函数家族详解
- R语言 apply函数家族详解
- R语言之apply家族函数
- R之apply家族函数介绍
- R语言中apply函数使用
- R语言学习之 apply家族的使用
- 【R语言】apply函数族
- apply家族函数
- R语言apply函数族笔记
- R语言apply函数族笔记
- R语言apply族函数详解
- 掌握R语言中的apply函数族
- R语言中的循环函数(Apply)
- 5、apply函数家族详解
- 这8种武器点亮程序员的个人品牌
- leetcode
- css jquery 实现图片轮换带效果,点击图片可跳网页
- easymock教程-record-replay-verify模型
- Android Intents教程(译)
- R语言中apply函数家族
- leetcode
- 分页显示--订单内容
- 基于echarts的背景色渐变和图例渐变的实例
- leetcode
- leetcode
- C#集合 泛型集合
- 【蓝桥杯】 快速幂
- 搜索题解