R语言学习笔记(四):apply,sapply,lapply,tapply,vapply以及mapply的用法

摘要:
Apply()Apply(m,dimcode,f,fargs)m是一个矩阵。Dimcode是尺寸编号。如果选择1,则为行应用函数,如果选择2,则为列应用函数。F是函数fargs是F>z<-矩阵(1:6,nrow=3)>f<-函数(x){+x/c(2,8)+}>Apply(z,1,f)#f函数得到两个元素,然后是几行,垂直[,1][,2][,3][

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

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()执行的操作是:暂时将x分组,每组对应一个因子水平,得到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

免责声明:文章转载自《R语言学习笔记(四):apply,sapply,lapply,tapply,vapply以及mapply的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[开荒啦]ECS服务器初体验shell脚本操作mysql数据库—创建数据库,在该数据库中创建表(插入,查询,更新,删除操作也可以做)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Debian 命令行方式配置网络

确保未在文件/etc/network/interfaces中手动配置网络,即应删除上述1和2中配置的内容。打开nmtui的图形界面并直接进行配置。当然,您也可以在此处设置无线连接。...

CentOS7 初始化配置

允许新TCP连接net.ipv4.TCP _ tw_ reuse=1net.ipv4.TCP _ mem=945000009150000009270000000net.ipv4 TCP _ fin_ Timeout=1#启用keepalive时,TCP发送keepalive消息的频率。默认值为2小时net.ipv4.tcp _keepalive_Time=3...

postgresql笔记

一旦任何有价值的对象被转移到新所有者,可以使用DROPOWNED命令删除被删除角色所拥有的任何剩余对象。此外,DROPOWNED不会删除整个数据库或表空间。因此,如果角色有任何尚未转移到新所有者的数据库或表空间,则需要手动删除它们。DROPOWNED还将注意到,对于不属于目标角色的对象,删除授予目标角色的任何特权。因为REASSIGNOWNED不会接触这些对...

vSphere HA 原理与配置

应当基于可用性需求和群集的特性选择vSphereHA接入控制策略。...

VMP加壳(三):VMP壳爆破实战-破解某编辑类软件

同时,记住在内存视图中向VMP0段提供断点后继续单击确认按钮,以查看调用方法的位置(此处的返回地址为0x5E01E9),但此处返回push(或vm条目)。这个地方会是验证码检测的入口吗!通过字符串查找各种键提示(sn、不正确注册等)的内存:通过访问断点查找键代码,然后找出调用该函数的函数,这与JCC指令的距离更远。...

excel下划线转驼峰公式

最近,为了避免麻烦,我决定生成jquery的json对象结构。数据表。下划线应变成驼峰,如下所示:=LEFT&MID...