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

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
(0)

相关推荐

  • 生信编程直播课程优秀学员作业展示1

    题目 人类基因组外显子区域长度 学员:x2yline 具体题目详情请参考生信技能树论坛 题目数据来源为:ftp://ftp.ncbi.nlm.nih.gov/pub/CCDS/current_huma ...

  • R数据分析:apply()的各种变体你分清了吗?

    apply函数可以看作是循环的替代方法,在R语言中,apply函数的变体有很多,好多时候同学搞不清到底该用apply呢,还是tapply呢还是sapply呢.今天就给大家系统地写一写. The app ...

  • R语言学习笔记

    R语言学习笔记

  • 那些年倒腾的R语言学习笔记,全都在这里了~

    今天这一篇整理一下我以往推送过的所有R语言相关文章,一来是方便大家的检索,二来也是阶段性学习的一次总结. 关于内容分类,我分成了学习心得篇.R语言基础.数据可视化.网络数据爬取,然后各自类别进行详细的 ...

  • ​​​​R语言学习笔记(五)——曼哈顿图

    iJournal 学术期刊信息查询 386篇原创内容 Official Account  ↑ ↑  关注iJournal,选刊快人一步  ↑ ↑  iJournal后台回复"2021学科&q ...

  • 零基础R语言学习路线

    其实相对于常见的编程语言,R语言还是非常容易上手.学习1年多时间,就可以找一份不错的工作了. 前言 我当初学习R的时候在网上搜到一则流传很广的R语言学习路线图(R语言学习由浅入深路线图),我在微信圈, ...

  • R语言学习小感悟

    最近看了看<R数据科学>(即R for data science的中文版)和<R语言-实用数据分析和可视化技术>(即R for Everyone Advanced Analyt ...

  • 《中医基础理论》学习笔记(四)

    阴阳学说 阴阳学说是在气一元论的基础上建立起来的中国古代的朴素的对立统一理论,属于中国古代唯物论和辩证法范畴,体现出中华民族辩证思维的特殊精神. 阴阳学说认为:世界是物质性的整体,宇宙间一切事物不仅其 ...

  • 学习笔记四

    蒋介石逃离大陆带走两样东西,泥土和<论持久战>,一个黄埔军校的校长都写不出这样的书.毛主席能把坏事变好事,共产党通过抗日人越来越多. 你越不在乎,反而越在乎你. 自以为是的人也敬畏副班. ...

  • 【Go语言学习笔记一】基础语法

    行分隔行 在 Go 程序中,一行代表一个语句结束.每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾, 但是可以使用分号:结尾,如果当你将多个语句写在同一行时,则必须使用分号: 一.变量 1. ...

  • flask学习笔记(四):利用render

    基础 render_template()有什么用 在Python代码中 直接生成 HTML 缺点很多,比如笨拙,效率低,可读性差.因此, Flask 提供了 Jinja2 模板引擎来帮助开发者高效灵活 ...