在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. 如何POST一个JSON格式的数据给Restful服务

    在Android/java平台上实现POST一个json数据: JSONObject jsonObj = new JSONObject(); jsonObj.put("username&qu ...

  2. day21<IO流+&FIle递归>

    IO流(字符流FileReader) IO流(字符流FileWriter) IO流(字符流的拷贝) IO流(什么情况下使用字符流) IO流(字符流是否可以拷贝非纯文本的文件) IO流(自定义字符数组的 ...

  3. POJ 1243 One Person

    题意: 猜数字, 给定 G, L, G 表示可以猜的次数, 每猜一次, G减一, 假如猜的 number 大于 target, L 还需减一, 当 L == -1 或者 G==0 时, 若还没猜中, ...

  4. VS2015编译GDAL2.2.1源码

    下载完GDAL2.2.1,你会发现这货没有CMakeLists.txt,对于我这样的只会用CMake GUI的货来说,着实很难过. 需要用VS带的nmake来生成.sln 管理员身份启动VS2015命 ...

  5. javascript中五种基本数据类型

    前言: JavaScript中有五种基本数据类型(也叫做简单数据类型)分别为:undefined.null.bolean.number.string:另外还含有一种复杂的数据类型:object. 深入 ...

  6. MySQL建表字段类型

    1.数据库:在MySQL中,要存储数据,必须从数据库开始,因此首先要创建数据库,但由于学校的MySQL服务器对学生数据帐号有限止,学生不得创建数据库,故每个学生的帐号中已事先由信息中心为大家建立了一个 ...

  7. php学习十四:抽象,接口和多态

    多态为面向对象编程的精华所在,js等面向过程的语言虽然可以模拟面向对象,但是毕竟模仿的永远比不上真的,所以了解而且会使用面向对象的多态是必不可少的 在了解多态之前,我们必须要了解接口,但是接口又是在抽 ...

  8. (一)微信小程序之模拟调用后台接口踩过的坑

    如下图标记的三个点 在调试过程中出现问题,特此记录. 1. 之前在浏览器测试接口习惯省略 http:// ,是因为浏览器默认有一个检测,在你输入的网址前面加http://,如果有就不加. 然而在微信小 ...

  9. Android 设置wifi共享电脑服务器资源

    其实win7本身就自带无线热点的功能,按下面的方法设置. 开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网,节省网费和路由器购买 ...

  10. Linux应急响应思路详谈

    一.主机篇: 1.自动化初筛,建议使用RootkitHunter (1)安装 $sudo wget https://jaist.dl.sourceforge.net/project/rkhunter/ ...