R的apply函数怎么用

Python025

R的apply函数怎么用,第1张

在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(1:6,nrow=3, dimnames = list(rname, cname))

b为:

first second

one 1 4

two 2 5

three 3 6

继续举几个例子:

apply(b,1,sum)

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

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

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

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

上述指令的返回结果为:

one two three

5 7 9

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

举一个3维的情况:

首先顶一个三维数组:

x=array(1:24,c(2,3,4))

三维数组为:

, , 1

[,1] [,2] [,3]

[1,]135

[2,]246

, , 2

[,1] [,2] [,3]

[1,]79 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,1,sum)

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

[1] 144 156

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

apply(x,2,sum)

结果为:

[1] 84 100 116

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

第二个参数改成3后,

apply(x,3,sum)

结果为:

[1] 21 57 93 129

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

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

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

myfun <- function(x){

sum(x^2)

}

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

apply(b,1,myfun)

计算结果为:

one two three

172945

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

链接: http://www.bio-info-trainee.com/4385.html

我做题的时候主要翻阅学习了《R语言实战》里统计相关内容。

需要掌握R内置数据集及R包数据集

鸢尾花(iris)数据集,包含150个鸢尾花的信息,共五列,分别为萼片长度(Sepal.Length)、萼片宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)和种类(Species)。前四列为定量数据,后一列种类为定性数据,是非连续的字符变量。

定量数据的集中趋势指标主要是:众数、分位数和平均数

定量数据的离散趋势指标主要是:极差,方差和标准差,标准分数,相对离散系数(变异系数),偏态系数与峰态系数

分组统计,最一开始是想将数据集分成三个数据框,重复之前函数,有几个方法:

或者不分开,之前对原数据集计算:

apply函数可以解决数据循环处理的问题,可以对矩阵、数据框、数组(二维、多维),按行或列进行循环计算,对子元素进行迭代,并把子元素以参数形式给自定义的FUN函数中,并返回计算结果。

函数定义:

apply(X,MARGIN,FUN,...)

参数列表:

用来对list、data.frame进行循环,并返回和X长度同样的list结构作为结果集。

同lapply函数,多了2个参数simplify和USE.NAMES,返回值为向量,不是list对象。

类似sapply函数,提供了FUN.VALUE参数,用来控制返回值的行名。

类似sapply函数,第一个参数为FUN,可接受多个数据。

tapply函数用于分组的循环计算,相当于group by的操作。

函数定义:

tapply(X,INDEX,FUN,simplify,...)

参数列表:

只处理list类型数据,对list的每个元素进行递归遍历,如果list包括子元素则继续遍历。

R可以计算多种相关系数,包括Pearson相关系数、Spearman相关系数、Kendall相关系数、偏相关系数、多分格相关系数、多系列相关系数。cor()函数可以计算前三种相关系数,cov()函数可以计算协方差。

数据的标准化是指中心化之后的数据在除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差。scale()函数可以完成标准化。

mtcars数据集是32辆汽车在11个指标上的数据。

airway包是8个样本的RNA-seq数据的counts矩阵,这8个样本分成2组,每组是4个样本,分别是 trt 和 untrt 组。

t检验是一种可用于比较的假设检验。

理解t检验:一个年纪共有好多学生,需要研究他们的平均身高。这时,这批学生是我们 要研究的对象 ,即 总体 。从这个年纪中每个班级随机挑选10名同学,这部分同学则为 样本 ,通过样本来对总体的某个统计特征(比如上面研究的平均值、众数、方差等)做判断的方法为 假设检验 。

一个针对两组的独立样本t检验可以用于检验两个总体的均值相等的假设,检验调用格式为:

t.test( y ~ x, data )

其中y是一个数值型变量,x是一个二分变量。

t.test(y1,y2)

其中y1、y2为数值型向量。

现在还不能用自己的语言解释清楚,整合几篇写的比较详细的教程:

http://www.biye5u.com/article/R/2019/6399.html

https://www.jianshu.com/p/67be9b3806cd

统计这部分还是似懂非懂的状态,继续学习~

更多学习资源:

生信技能树公益视频合辑

生信技能树账号

生信工程师入门最佳指南

生信技能树全球公益巡讲

招学徒

...

你的宣传能让数以万计的初学者找到他们的家,技能树平台一定不会辜负每一个热爱学习和分享的同道中人