转自:https://www.cnblogs.com/nanhao/p/6674063.html

1.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函数经常用来计算矩阵中行或列的均值、和值的函数。

  1. rname = c("one","two","three")
  2. cname = c("first","second")
  3. b <- matrix(:,nrow=, dimnames = list(rname, cname))
  4.  
  5. b为:
  6. first second
  7. one
  8. two
  9. three

使用以上为数据举例。

  1. apply(b,,sum)
  2.  
  3. 结果:
  4. one two three

这里有几个元素它的输出结果就会有几列。

比如对这个sum,对于行进行求和,那么有3行就有3个结果元素。

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

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

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

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

第四个参数是fargs是f的可选参数集。

  1. > z <- matrix(:, nrow = )
  2. > f <- function(x) {
  3. + x/c(, )
  4. + }
  5. > apply(z,,f) #f得到3个元素,每个元素(组件)里有两个值,所以是3列,竖着来看
  6. [,] [,] [,]
  7. [,] 0.5 1.000 1.50
  8. [,] 0.5 0.625 0.75

//这个例子还挺好的,最终的结果返回的是一个矩阵。那么apply输出是向量或者矩阵。

2.lapply函数——list

lapply()(代表list apply)与矩阵的apply()函数的用法类似, 对列表的每个组件执行给定的函数,并返回另一个列表

  1. > x <- list(a = :, beta = exp(-:), logic = c(TRUE,FALSE,FALSE,TRUE))
  2. > lapply(x, mean)
  3. $a
  4. [] 5.5
  5.  
  6. $beta
  7. [] 4.535125
  8.  
  9. $logic
  10. [] 0.5

//这里的exp是e的多少次方。

3.sapply()——simplified lapply

sapply()(代表simplified [l]apply)可以将结果整理以向量,矩阵,列表 的形式输出。

  1. > sapply(x, mean)
  2. a beta logic
  3. 5.500000 4.535125 0.500000
  4. > sapply(x, quantile) #每一个对应组件输出5个元素,所以为5行,像矩阵一样,竖着来的。
  5. a beta logic
  6. % 1.00 0.04978707 0.0
  7. % 3.25 0.25160736 0.0
  8. % 5.50 1.00000000 0.5
  9. % 7.75 5.05366896 1.0
  10. % 10.00 20.08553692 1.0
  11. > sapply(:, seq)
  12. [[]]
  13. []
  14.  
  15. [[]]
  16. []
  17.  
  18. [[]]
  19. []  

//quantile是分位数的意思。默认是计算这5个分位数。

4.tapply

tapply(x,f,g)需要向量 x (x不可以是数据框),因子或因子列表 f 以及函数 g 。
tapply()执行的操作是:暂时将x分组,每组对应一个因子水平(f),得到x的子向量,然后这些子向量应用函数 g.

  1. > a <- c(,,,)
  2. > b <- c('q', 'w', 'q','w')
  3. > tapply(a, b, mean)
  4. q w

先按照b分组,然后应用了mean函数。

5.mapply

  1. > l1 <- list(a = c(:), b = c(:))
  2. > l2 <- list(c = c(:), d = c(:))
  3. > mapply(sum, l1$a, l1$b, l2$c, l2$d)
  4. []
  5. > l1 <- list(a = c(:), b = c(:))
  6. > l2 <- list(c = c(:), d = c(:))
  7. > mapply(sum, l1$a)
  8. []
  9. > l1 <- list(a = c(:), b = c(:))
  10. > l2 <- list(c = c(:), d = c(:))
  11. > mapply(sum, l1$a,l1$b)
  12. []

//根据这个就能比较好的看出来它的作用,先对第一个参数应用sum,再对第二个参数sum,

比如对于sum求和:第一个参数就是本参数,另一个参数就是上一次计算的结果。

  1. 多参数版本的sapply()。第一次计算传入各组向量的第一个元素到FUN,进行结算得到结果;
  2.  
  3. 第二次传入各组向量的第二个元素,得到结果;第三次传入各组向量的第三个元素…以此类推。

R中apply等函数用法[转载]的更多相关文章

  1. delphi中Application.MessageBox函数用法详解

    delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...

  2. R中的sample函数

    今天介绍一些运算函数,它们的使用很简单,没有什么难度,但是也会用的着. 在医学统计学或者流行病学里的现场调查.样本选择经常会提到一个词:随机抽样.随机抽样是为了保证各比较组之间均衡性的一个很重要的方法 ...

  3. R中的par()函数的参数

    把R中par()函数的主要参数整理了一下(另外本来还整理了每个参数的帮助文档中文解释,但是太长,就分类之后,整理为图表,excel不便放上来,就放了这些表的截图)

  4. R语言do.call 函数用法详解

    虽然R语言有类型很丰富的数据结构,但是很多时候数据结构比较复杂,那么基本就会用到list这种结构的数据类型.但是list对象很难以文本的形式导出,因此需要一个函数能快速将复杂的list结构扁平化成da ...

  5. C++中string常用函数用法总结

    string(s小写)是C++标准库中的类,纯C中没有,使用时需要包含头文件#include<string>,注意不是<string.h>,下面记录一下string中比较常用的 ...

  6. js中apply,call的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但 ...

  7. R中apply函数族

    参考于:http://blog.fens.me/r-apply/ 1. apply的家族函数 2. apply函数 apply函数是最常用的代替for循环的函数.apply函数可以对矩阵.数据框.数组 ...

  8. 你真的懂了R中的stem函数是如何绘制茎叶图的么?

    本文原创,转载请注明出处,本人Q1273314690(交流学习)   哭晕 你真的学会了stem()函数了吗? stem()函数的使用方法是: stem(x, scale=1,width=80, at ...

  9. oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

随机推荐

  1. 13条Android手机必备技巧 让玩机更有趣

    腾讯数码讯(编译:张秀梅)如果你不是一名极客或手机爱好者,那么或许对于手中的Android手机来说,肯定无法做到百分之百了解.对于这款世界上最受欢迎的操作系统来说,有许多不为大部分人所知晓的使用技巧或 ...

  2. 【分布式系列之ActiveMq】ActiveMq入门示例

    前言 github地址:https://github.com/AndyFlower/web-back/tree/master/ActiveMq01 下载ActiveMQ :http://activem ...

  3. enum hack

    关于占用内存的大小,enum类型本身是不占内存的,编译器直接替换.但是enum类型的变量肯定是占内存的. class A{ public: //enum类型本身不占内存 enumEnumTest{ a ...

  4. Pyqt中富文本编辑器

    对于文本编辑,qt提供了很多控件 QLineEdit:单行文本输入,比如用户名密码等简单的较短的或者具有单一特征的字符串内容输入.使用text.settext读写 QTextEdit:富文本编辑器,支 ...

  5. XCache 一种快速可靠的PHP操作码缓存

    1,错误报告开启 错误报告是在PHP中一个非常有用的功能,应同时在开发阶段启用. 这可以帮助我们确定我们的代码中的问题. 最常用的功能是“E_ALL”,这有助于我们发现所有的警告和严重错误. 必须指出 ...

  6. numpy.ndarray的赋值操作

    mat=zeros((3,4)) #生成一个3行4列全部元素为0的矩阵 mat[1,:]=111 #从第1行第0列开始,一直到最后一列,赋值为1,效果与mat[1,0:3]相同,前置0可以省略,最后的 ...

  7. oracle union 用法

    [sql] view plaincopyprint?众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包括以下字段与数据: drop t ...

  8. Oracle体系结构之oracle密码文件管理

    密码文件 密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [or ...

  9. CyanogenMod---android

    http://blog.csdn.net/sheldon4090/article/details/7736957--service. android进程间通信:使用AIDL http://blog.c ...

  10. 用 Python 替代 Bash 脚本(转)

    add by zhj: 其实作者是想说用Python来做那些Bash实现起来比较麻烦的部分,即将Bash与Python结合使用. 英文原文:http://www.linuxjournal.com/co ...