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

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

使用以上为数据举例。

apply(b,,sum)

结果:
one two three

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

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

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

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

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

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

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

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

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

2.lapply函数——list

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

> x <- list(a = :, beta = exp(-:), logic = c(TRUE,FALSE,FALSE,TRUE))
> lapply(x, mean)
$a
[] 5.5 $beta
[] 4.535125 $logic
[] 0.5

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

3.sapply()——simplified lapply

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

> sapply(x, mean)
a beta logic
5.500000 4.535125 0.500000
> sapply(x, quantile) #每一个对应组件输出5个元素,所以为5行,像矩阵一样,竖着来的。
a beta logic
% 1.00 0.04978707 0.0
% 3.25 0.25160736 0.0
% 5.50 1.00000000 0.5
% 7.75 5.05366896 1.0
% 10.00 20.08553692 1.0
> sapply(:, seq)
[[]]
[] [[]]
[] [[]]
[]  

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

4.tapply

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

> a <- c(,,,)
> b <- c('q', 'w', 'q','w')
> tapply(a, b, mean)
q w

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

5.mapply

> l1 <- list(a = c(:), b = c(:))
> l2 <- list(c = c(:), d = c(:))
> mapply(sum, l1$a, l1$b, l2$c, l2$d)
[]
> l1 <- list(a = c(:), b = c(:))
> l2 <- list(c = c(:), d = c(:))
> mapply(sum, l1$a)
[]
> l1 <- list(a = c(:), b = c(:))
> l2 <- list(c = c(:), d = c(:))
> mapply(sum, l1$a,l1$b)
[]

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

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

多参数版本的sapply()。第一次计算传入各组向量的第一个元素到FUN,进行结算得到结果;

第二次传入各组向量的第二个元素,得到结果;第三次传入各组向量的第三个元素…以此类推。

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. IOS设计模式第七篇之观察者设计模式

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 观察者设计模式 在观察者设计模式里面,一个对象通知其他的对象一些状态的改变.涉及这些对象不需要知道另一个对象---因此鼓励解耦设计模式.这个设计模式 ...

  2. 分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建

    一.hbase简介 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行 ...

  3. SQL Server 优化总结

    1.作为过滤条件字段的数据表,在拼接语句尽量优先拼接,以提升查询效率

  4. JavaScript 浮点数陷阱及解法

    众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...

  5. jQuery属性操作(三)

    在阅读attr.remove方法时,看到一些对浏览器兼容性做处理的hooks.接下来看一下这些hooks都做了哪些兼容性处理 1.attrHooks.主要处理IE6-9 input的type属性无法写 ...

  6. Android 缓存策略demo

    packageinstaller\permission\model\PermissionApps.java /** * Class used to reduce the number of calls ...

  7. apache两种工作模式详解

    prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请 ...

  8. gradle项目,连同依赖一起打jar包

    在build里加入以下配置(如果不是一个可执行的jar包的话就不用配置Main-Class属性): def mainClassName = "你需要执行的main方法所在的的包名+类名&qu ...

  9. 【C#】浏览器源代码

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. vue--父子组件的传值

    什么是父子组件? 组件中引入组件,被引入的组件就是子组件.例如在 Hello.vue 组件中引入 Header.vue 组件,那么 Hello.vue 就是父组件,Header.vue就是子组件. 一 ...