R中apply等函数用法[转载]
转自:https://www.cnblogs.com/nanhao/p/6674063.html
https://www.cnblogs.com/aquastone/p/r-apply.html
0.总结
- apply应用于矩阵的每个维度
- lapply应用于list的每列
- sapply用于列表整理输出
- tapply按因子水平分组操作
- mapply累计操作,m=multiple?
1.apply函数——对矩阵
apply把一个function作用到array或者matrix的margins(可以理解为数组的每一行或者每一列)中,返回值时vector、array、list。
apply函数经常用来计算矩阵中行或列的均值、和值的函数。
rname = c("one","two","three") cname = c("first","second") b <- matrix(1:6,nrow=3, dimnames = list(rname, cname)) b为: first second one 1 4 two 2 5 three 3 6
使用以上为数据举例。
apply(b,1,sum) 结果: one two three 5 7 9
上面的指令代表对矩阵b进行行计算,分别对每一行进行求和。函数涉及了三个参数:
第一个参数是指要参与计算的矩阵;
第二个参数是指按行计算还是按列计算,1——表示按行计算,2——按列计算;
第三个参数是指具体的运算函数。
第四个参数是fargs是f的可选参数集。
> z <- matrix(1:6, nrow = 3) > f <- function(x) { + x/c(2, 8) + } > apply(z,1,f) #f得到3个元素,每个元素(组件)里有两个值,所以是3列,竖着来看 [,1] [,2] [,3] [1,] 0.5 1.000 1.50 [2,] 0.5 0.625 0.75
//这个例子还挺好的,最终的结果返回的是一个矩阵。那么apply输出是向量或者矩阵。
2.lapply函数——list
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
//这里的exp是e的多少次方。
3.sapply()——simplified lapply
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
//quantile是分位数的意思。默认是计算这5个分位数。
4.tapply
tapply(x,f,g)需要向量 x (x不可以是数据框),因子或因子列表 f 以及函数 g 。
tapply()执行的操作是:暂时将x分组,每组对应一个因子水平(f),得到x的子向量,然后这些子向量应用函数 g.
> a <- c(24,25,36,37) > b <- c('q', 'w', 'q','w') > tapply(a, b, mean) q w 30 31
先按照b分组,然后应用了mean函数。
5.mapply
> 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 > l1 <- list(a = c(1:10), b = c(11:20)) > l2 <- list(c = c(21:30), d = c(31:40)) > mapply(sum, l1$a) [1] 1 2 3 4 5 6 7 8 9 10 > 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) [1] 12 14 16 18 20 22 24 26 28 30
//根据这个就能比较好的看出来它的作用,先对第一个参数应用sum,再对第二个参数sum,
比如对于sum求和:第一个参数就是本参数,另一个参数就是上一次计算的结果。
多参数版本的sapply()。第一次计算传入各组向量的第一个元素到FUN,进行结算得到结果;
第二次传入各组向量的第二个元素,得到结果;第三次传入各组向量的第三个元素…以此类推。
相关文章
- 解密jQuery内核 DOM操作的核心函数domManip
- javascript some()函数用法详解
- 函数计算进行自动化运维专题
- oracle的substr函数的用法
- 浅析C语言中strtol()函数与strtoul()函数的用法
- python简单的函数定义和用法实例
- Python内置函数reversed()用法分析
- Oracle 常用函数
- ABAP SOAMANAGER启动方式,以及暴露的函数function module,以web service方式执行的运行时细节
- TypeScript 函数类型参数的用法举例
- PHP Error 和 Logging 函数
- 【C语言】详解 calloc 函数用法
- Python 没有函数重载?如何用装饰器实现函数重载?
- scanf()函数用法小结
- 内置函数:max 用法
- C++ getline函数用法详解
- 使用roc函数的格式大致如下,ci=T代表计算95%的置信区间,auc=T则会返回auc值 roc(aSAH$outcome, aSAH$s100b, smooth=TRUE,ci=T,
- Python标准库:内置函数oct(x)
- Windows API一日一练(17)DialogBox和DialogBoxParam函数
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
- pytorch中logsumexp函数的用法
- 【卷积神经网络】12、激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / Mish
- C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是
- maple中plot和plots函数的区别——笔记1