在R语言的帮助文档里,apply函数的功能是:

Retruns a vector or array or list of values obtained by applying a function to margins of an array or matrix.

就是说apply把一个function作用到array或者matrix的margins(可以理解为数组的每一行或者每一列)中,返回值时vector、array、list。

简单的说,apply函数经常用来计算矩阵中行或列的均值、和值的函数,具体方法如下:

定义一个3×2的矩阵:

rname = c("one","two","three")
cname = c("first","second")
b <- matrix(:,nrow=, dimnames = list(rname, cname))

b为:

      first second
one 1 4
two 2 5
three 3 6

继续举几个例子:

apply(b,,sum)

上面的指令代表对矩阵b进行行计算,分别对每一行进行求和。函数涉及了三个参数:

第一个参数是指要参与计算的矩阵;

第二个参数是指按行计算还是按列计算,1——表示按行计算,2——按列计算;

第三个参数是指具体的运算参数。

上述指令的返回结果为:

  one   two three
5 7 9

值得注意的是,apply函数时可以针对数组进行计算你的,就是说数组未必是2维的!!

举一个3维的情况:

首先顶一个三维数组:

x=array(:,c(,,))

三维数组为:

, , 1

     [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6 , , 2 [,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12 , , 3 [,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18 , , 4 [,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24

使用如下指令:

apply(x,,sum)

则对1到23的所有奇数进行求和,结果为:

[1] 144 156

同样,第二个参数改成2后,

apply(x,,sum)

结果为:

[1]  84 100 116

是按照第二个维度进行的求和计算。

第二个参数改成3后,

apply(x,3,sum)

结果为:

[1]  21  57  93 129

即对第三个维度进行求和计算。

对于apply()函数的第三个参数,制定了具体用什么函数进行计算,之前例子里使用的都是sum,对于用户自定义的函数同样可以在这里使用。还用前面的矩阵b来举例。

定义了一个求平方和的函数:

myfun <- function(x){
sum(x^)
}

如果选择按行计算平方和,可使用如下指令:

apply(b,,myfun)

计算结果为:

one   two three
17 29 45

通常情况大家使用apply之后是需要把apply的返回值作为输入在其他代码中使用的,这里尤其重要的一点是apply的返回值的维度。上面的例子就算每一行或者每一列的sum,使用apply之后,返回都是一个向量,并不会因为apply计算行(列)的sum就会自动返回一个列(行)向量。

R语言apply()函数用法的更多相关文章

  1. R语言 subset()函数用法

    subset() 函数: subset(dataset , subset , select ) dataset 是 要进行操作的数据集 subset 是对数据的某些字段进行操作 select 选取要显 ...

  2. R语言seq()函数用法

    1.seq() 用来生成一组数字的函数. Usage: ## Default S3 method:seq(from = 1, to = 1, by = ((to - from)/(length.out ...

  3. 【R】R语言常用函数

    R语言常用函数 基本 一.数据管理vector:向量 numeric:数值型向量 logical:逻辑型向量character:字符型向量 list:列表 data.frame:数据框c:连接为向量或 ...

  4. R语言封装函数

    R语言封装函数 原帖见豆瓣:https://www.douban.com/note/279077707/ 一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分. 1. 函数名称,即要 ...

  5. 博文推荐】Javascript中bind、call、apply函数用法

    [博文推荐]Javascript中bind.call.apply函数用法 2015-03-02 09:22 菜鸟浮出水 51CTO博客 字号:T | T 最近一直在用 js 写游戏服务器,我也接触 j ...

  6. linux c语言 select函数用法

    linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unis ...

  7. R语言table()函数

    R语言table()函数比较有用,两个示例尤其是混淆矩阵这个案例比较有用: 例子一:统计频次 z<-c(1,2,2,4,2,7,1,1);z1<-table(z);summary(z1); ...

  8. R语言基本操作函数---变量的基本操作

    1.变量变换        as.array(x),as.data.frame(x),as.numeric(x),as.logical(x),as.complex(x),as.character(x) ...

  9. R语言—使用函数sample进行抽样

    在医学统计学或者流行病学里的现场调查.样本选择经常会提到一个词:随机抽样.随机抽样是为了保证各比较组之间均衡性的一个很重要的方法.那么今天介绍的第一个函数就是用于抽样的函数sample:   > ...

随机推荐

  1. centos6.5 开发环境部署(nignx1.7.10+php5.4.38+mysql+ftp)

    一些命令和规则以及准备 本次流程再 DigitalOcean上的vps上通过 查看是否已经安装 rpm -qa | grep nginx 删除安装 #普通删除模式 rpm -e nginx #强力删除 ...

  2. Android 中如何从一个App启动另外一个App(如启动支付界面、启动地图界面、应用商场下载App等场景)

    假定两个App,分别是A和B,当A运行某个功能需要启动B,一种是启动B应用,一种直接进入B的某个Activity.搜了很多资料,没有一个完整的.下面就A--Android5.1.1.B--Androi ...

  3. conn.setAutoCommit(false)数据回滚设置

    前言:介绍一点爱混淆的概念. 1.mysql中默认 autocommit=1:事物自动提交. 可通过 select @@autocommit;查看 但是是设置事务自动提交模式为set autocomm ...

  4. 判断页面中的js方法是否存在,存在就调用它,不存在则忽略

    if(typeof queryResource != 'undefined' && queryResource instanceof Function) queryResource(a ...

  5. 点击button,button背景图片变化

    1.设置背景渐变效果,在drawable目录下建buttonshape.xml文件, 内容为: <?xml version="1.0" encoding="utf- ...

  6. 【CSS系列】布局篇

    一.让设计居中 1.使用自动空白边让设计居中 <style type="text/css"> body{ text-align:center; min-width:76 ...

  7. Java多线程详解(二)

    评论区留下邮箱可获得<Java多线程设计模式详解> 转载请指明来源 1)后台线程 后台线程是为其他线程服务的一种线程,像JVM的垃圾回收线程就是一种后台线程.后台线程总是等到非后台线程死亡 ...

  8. mysql 之 group by 性能优化 查询与统计分离

    背景介绍 记录共128W条!   SELECT cpe_id, COUNT(*) restarts FROM business_log WHERE operate_time>='2012-12- ...

  9. shell脚本备份日志

    #!/bin/sh # back tomcat catalina.out cd /home/log_bak #the file DATE=`date '+%Y%m%d-%H%M'` ARCHIVE=$ ...

  10. java后端技术栈