apply()
apply(m,dimcode,f,fargs)
- m 是一个矩阵。
- dimcode是维度编号,取1则为对行应用函数,取2则为对列运用函数。
- f是函数
- fargs是f的可选参数集
> z <- matrix(1:6, nrow = 3) > f <- function(x) { + x/c(2, 8) + } > apply(z,1,f) #f函数得到两个元素,则为几行,竖着来的 [,1] [,2] [,3] [1,] 0.5 1.000 1.50 [2,] 0.5 0.625 0.75

zzz=matrix(1:6,nrow=2)
zzz
yyy <- apply(zzz, 1, function(x) sum( x <=3))
yyy
lapply()
lapply()(代表list apply)与矩阵的apply()函数的用法类似, 对列表的每个组件执行给定的函数,并返回另一个列表。
> x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE)) > lapply(x, mean) $a [1] 5.5 $beta [1] 4.535125 $logic [1] 0.5
sapply()
sapply()(代表simplified [l]apply)可以将结果整理以向量,矩阵,列表 的形式输出。
> sapply(x, mean) a beta logic 5.500000 4.535125 0.500000 > sapply(x, quantile) #每一个对应组件输出5个元素,所以为5行,像矩阵一样,竖着来的。 a beta logic 0% 1.00 0.04978707 0.0 25% 3.25 0.25160736 0.0 50% 5.50 1.00000000 0.5 75% 7.75 5.05366896 1.0 100% 10.00 20.08553692 1.0 > sapply(2:4, seq) [[1]] [1] 1 2 [[2]] [1] 1 2 3 [[3]] [1] 1 2 3 4
vapply()
vapply()与sapply()相似,他可以预先指定的返回值类型。使得得到的结果更加安全。
> vapply(x, quantile, c(1,2,5,6,8)) #它需要一个5个长度的向量来告诉他返回的类型,向量里面的内容可以变换 a beta logic 0% 1.00 0.04978707 0.0 25% 3.25 0.25160736 0.0 50% 5.50 1.00000000 0.5 75% 7.75 5.05366896 1.0 100% 10.00 20.08553692 1.0
tapply( )
tapply(x,f,g)需要向量 x (x不可以是数据框),因子或因子列表 f , 函数 g 。
tapply()执行的操作是:按照f对x分组,在分组后的向量上运行函数 g
> a <- c(24,25,36,37) > b <- c('q', 'w', 'q','w') > tapply(a, b, mean) q w 30 31
mapply()
多参数版本的sapply()。第一次计算传入各组向量的第一个元素到FUN,进行结算得到结果;第二次传入各组向量的第二个元素,得到结果;第三次传入各组向量的第三个元素…以此类推。
l1 <- list(a = c(1:10), b = c(11:20)) l2 <- list(c = c(21:30), d = c(31:40)) mapply(sum, l1$a, l1$b, l2$c, l2$d) ## [1] 64 68 72 76 80 84 88 92 96 100
REF:
https://www.cnblogs.com/xihehe/p/7473981.html