#apply函数,沿着数组的某一维度处理数据
#例如将函数用于矩阵的行或列
#与for/while循环的效率相似,但只用一句话可以完成
#apply(参数):apply(数组,维度,函数/函数名) > x <- matrix(1:16,4,4)
> x
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16 > apply(x,2,mean) #沿着x的第二维度求平均,x有两个维度,行和列,第二个维度就是沿着x的列求平均
[1] 2.5 6.5 10.5 14.5 > apply(x,2,sum) #沿着x的第二维度求和
[1] 10 26 42 58 > apply(x,1,sum)
[1] 28 32 36 40 > apply(x,1,mean)
[1] 7 8 9 10 > rowSums(x) #行的总和
[1] 28 32 36 40 > rowMeans(x) #行的平均值
[1] 7 8 9 10 > colSums(x) #列的总和
[1] 10 26 42 58 > colMeans(x) #列的平均值
[1] 2.5 6.5 10.5 14.5 > x <- matrix(rnorm(100),10,10) #随机从正态分布中取100个数据
> x
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] -0.6028508 1.4642242 0.04427663 0.2871729 0.04981660 -0.8558895 0.5130530
[2,] -1.9378240 0.2039535 -0.19909385 -0.4309858 0.85004373 0.4976094 -0.5580487
[3,] 1.2487024 0.3279828 -0.61134011 -0.1575374 -0.29225789 0.3887533 0.3905769
[4,] -2.5628573 0.4519969 -0.31849107 -1.4633238 0.46414326 0.3366307 -2.1061818
[5,] -0.2568173 -0.7387934 -0.65190045 -1.5211132 -0.68554516 0.3329140 -1.3744196
[6,] -0.3072326 -1.2575338 0.42412478 -1.3476506 -0.21221874 0.7673182 -0.4560506
[7,] 0.1561480 0.3020903 0.36489259 -0.2507313 1.35735729 -0.2610940 0.5355151
[8,] 0.6536334 0.3717443 -0.77679094 1.0801878 0.07262787 -0.5006976 -2.6058038
[9,] 1.4417755 -1.2989872 1.04908993 0.5010024 -0.41921218 2.2141514 0.3646026
[10,] -1.6978768 -0.9097784 0.01689380 0.6535433 1.55588778 0.4550700 2.5595517
[,8] [,9] [,10]
[1,] -0.57296509 0.1170718 -1.89788063
[2,] 0.06360181 1.3552013 0.83369280
[3,] -0.44550756 0.3857978 0.24664750
[4,] 0.51678695 0.2522804 -0.77862862
[5,] 0.35021885 -0.2767039 -0.37358325
[6,] -0.12660675 -1.4168734 0.86864076
[7,] 0.69927317 0.6202195 -2.31017158
[8,] 1.43228754 1.3257759 0.59362053
[9,] -1.63696656 0.3467712 0.72186091
[10,] -1.02416667 -1.7024939 0.03971799 #解释:
#x赋值函数中的2*3*4分别对应行*列*组(相对应的维度即为1*2*3
#apply(x,c(1,2),mean)中1,2对应的维度为行*列,不需要考虑组,所以对每组相同位置的所有元素相加后求平均,因此输出的结果为2行3列的矩阵
#同理,apply(x,c(1,3),mean)中1,3对应的维度为行*组,所以分别对每组中的行求平均,因此输出的结果为2行4列的矩阵(x中有4个组,每组中有2行)
#同理,(2,3)就代表列*组了~ > apply(x,1,quantile,probs=c(0.25,0.75)) #quantile求数据的百分位点,可通过probs=c()进行分配
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
25% -0.5953794 -0.3730128 -0.2585778 -1.2921500 -0.7254813 -1.0571630 -0.1490114
75% 0.2446476 0.7496719 0.3880144 0.4231553 -0.2617889 0.2864419 0.5990434
[,8] [,9] [,10]
25% -0.3573663 -0.2277163 -0.9955696
75% 0.9735492 0.9672827 0.6039250 > x <- array(rnorm(2*3*4),c(2,3,4))#表示随机从正太分布中抽取出来的24个数据,按照三维排列出来。
> x
, , 1 [,1] [,2] [,3]
[1,] -0.6055074 0.1428984 -0.9020732
[2,] -0.6947868 1.3597884 0.8797562 , , 2 [,1] [,2] [,3]
[1,] -0.3114873 -2.3184400 0.4499677
[2,] 0.1497819 0.1295499 -1.6927436 , , 3 [,1] [,2] [,3]
[1,] 0.9606359 1.3313254 -0.60785734
[2,] 0.7255531 -0.1389708 -0.02877733 , , 4 [,1] [,2] [,3]
[1,] 0.0279858 0.9007448 0.1251860
[2,] 0.5111250 -0.4223850 -0.6083399 > apply(x,c(1,2),mean) #以第1及第2维为基础,沿第3方向压成平面
[,1] [,2] [,3]
[1,] 0.01790675 0.01413214 -0.2336942
[2,] 0.17291831 0.23199563 -0.3625262 > apply(x,c(1,3),mean)
[,1] [,2] [,3] [,4]
[1,] -0.4548941 -0.7266532 0.561368 0.3513056
[2,] 0.5149192 -0.4711373 0.185935 -0.1732000 > apply(x,c(2,3),mean)
[,1] [,2] [,3] [,4]
[1,] -0.6501471 -0.08085267 0.8430945 0.2695554
[2,] 0.7513434 -1.09444509 0.5961773 0.2391799
[3,] -0.0111585 -0.62138791 -0.3183173 -0.2415770

4-2 R语言函数 apply的更多相关文章

  1. R语言函数化学习笔记6

    R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...

  2. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...

  3. R语言函数化编程笔记2

    R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ...

  4. R语言函数化编程笔记1

    R语言函数化编程笔记1 notes:有一个不错的网站叫做stack overflow,有问题可以从上面找或者搜索答案,会有大佬相助. 在github上面可以找到很多R的扩展包,如果自己额修改被接受,那 ...

  5. R语言函数总结(转)

    R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字符不允许是数字. 基本命令要么是表达 ...

  6. r语言 函数

    R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能.但是初学者往往认为编写R函数十分困难,或者难以理解.这里对如何编写R函数进行简要的介绍. ...

  7. 【R笔记】R语言函数总结

    R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字 ...

  8. 【转】R语言函数总结

    原博: R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头, ...

  9. R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 后续加更内容: 应用一:if族有哪些成员呢?- ...

随机推荐

  1. win7下使用IIS服务器及自定义服务器端包含模块(SSI)步骤

    配置完过段时间就容易忘记,特此记录. 1.开启IIS服务器. 默认没有安装,需要先安装. 打开控制面板–> 打开“程序和功能”–> 左侧选择“启用或关闭windows功能”–> 找到 ...

  2. 热更新--动态加载framework

    1.准备工作:先自己封装一个framework:http://www.cnblogs.com/sunjianfei/p/5781863.html 2.把封装好的framework压缩成zip,放到本地 ...

  3. java中对JVM的深度解析、调优工具、垃圾回收

    jdk自带的JVM调优工具 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工 ...

  4. 【原】使用Builder模式替代构造参数传参

    前言:关于传递参数,当参数过多的时候我们可以考虑使用建造者模式. #没用 Builder模式 之前是这样传参的: 如下所示,构造方法里面的参数一大堆,看起来就非常的混乱. 用了Builder模式之后是 ...

  5. Java代理(三)

    前面说到了java的动态代理,但是动态代理依赖于接口,这次来看看cglib来实现的代理... 假设有如下方法,这回没有说接口哦~ package proxy.cglibProxy; public cl ...

  6. Java的工厂模式(一)

    Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...

  7. [微信小程序]微信开发工具出现 1not found 编译 .wxss文件信息错误怎么办?

    错误代码: "1not found 编译 .wxss文件信息错误",如 下图 出现场景: 1.一般出现在安装新版本之后出现的状况,可能由于版本之间的兼容导致 解决办法: 1.重装整 ...

  8. PopupWindow 的常用api封装

    对PopupWindow常用API的简单封装,几行代码就搞定PopupWindow弹窗,使用Builder模式,链式调用,像使用AlertDialog 一样 封装通用PopupWindow,Custo ...

  9. mysql(5.7.17)字符集设置(character_set/collation)

    0 查看字符集(character_set/collation) use information_schema;desc tables;    --一定记住tables表,information_sc ...

  10. mysql优化——explain详解

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...