对于apply函数家族的几个函数你是不是经常搞混,有时候不知道用哪个函数比较合适呢?下面就由小编详细解说apply函数家族中常用的八个函数吧。
apply()函数
函数调用格式:apply(X, MARGIN, FUN, ...)
MARGIN参数:1表示矩阵行,2表示矩阵列,c(1,2) 表示矩阵行和列
操作对象:矩阵、数组或数据框
操作方式:抽取矩阵或数据框的每行或每列,作为向量执行指定的FUN
返 回 值:向量(如果FUN返回一个值)、矩阵(如果FUN返回一个固定长度的向量,按列排列)或列表(如果FUN返回长度不同的向量)
实例:
lapply()函数
函数调用格式:lapply(X, FUN, ...)
操作对象:列表,数据框(不能用于矩阵或数组)
操作方式:针对列表的每一个元素执行FUN(如果操作对象是数据框,按列执行FUN)
返回值:与输入列表等长的列表
实例:
sapply()函数
函数调用格式:sapply(X, FUN, …, simplify = TRUE, USE.NAMES = TRUE)
Simplify参数:逻辑值或者字符串,如果simplify = FALSE ,则等价于lapply。默认值是TRUE,如果合适,将会返回一个向量或者矩阵。如果simplify = ” array”,结果将返回一个阵列。
USE.NAMES参数:逻辑值,如果为TRUE,且x没有被命名,则对x进行命名。
操作对象:列表简化版的lapply
操作方式:针对列表的每一个元素执行FUN
返回值:向量或矩阵
实例:
vapply()函数
函数调用格式:vapply(X, FUN, FUN.VALUE, …, USE.NAMES = TRUE)
simplify参数: 逻辑值或者字符串,如果可以,结果应该被简化为向量、矩阵或者高维数组。必须是命名的,不能是简写。默认值是TRUE,若合适将会返回一个向量或者矩阵。如果simplify = ” array”,结果将返回一个阵列。
FUN.VALUE参数:一个通用型向量,FUN函数返回值得模板
操作对象:向量或者表达式对象,其余对象将被通过as.list强制转换为list
操作方式:针对对象的每一个元素执行FUN
返回值:预定义类型
实例:
tapply()函数
函数调用格式:tapply(X, INDEX, FUN, …, simplify = TRUE)
INDEX参数:因子列表,和x长度一样,元素将被通过as.factor强制转换为因子
simplify参数:若为FALSE,tapply将以列表形式返回阵列。若为TRUE,FUN则直接返回数值
操作对象:向量
操作方式:把向量根据INDEX(比如因子)分组,对每一组执行FUN
返回值:数组或列表
实例:
eapply()函数
函数调用格式:eapply(env, FUN, …, all.names = FALSE, USE.NAMES = TRUE)
env参数:将被使用的环境
all.names参数:逻辑值,指示是否对所有值使用该函数
USE.NAMES参数:逻辑值,指示返回的列表结果是否包含命名
操作方式:通过对environment中命名值进行FUN计算后返回一个列表值,用户可以请求所有使用过的命名对象。
实例:
mapply()函数
函数调用格式:mapply(FUN, …, MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)
MoreArgs参数:FUN函数的其他参数列表
SIMPLIFY参数:逻辑或者字符串,可以减少结果成为一个向量、矩阵或者更高维阵列,详见sapply的simplify参数
USE.NAMES参数:逻辑值,如果第一个参数…已被命名,将使用这个字符向量作为名字操作对象:列表多变量版的 sapply
操作方式:将对…中的每个参数运行FUN函数,如有必要,参数将被循环。
返回值:向量或矩阵
实例:
rapply()函数
函数调用格式:rapply(X, FUN, classes = “ANY”, deflt = NULL, how = c(“unlist”, “replace”, “list”), …)
classes参数:关于类名的字符向量,或者为any时则匹配任何类
deflt参数:默认结果,如果使用了how = “replace”,则不能使用
how参数:字符串匹配三种可能结果操作对象:列表递归版本的lapply
实例: