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
统计这部分还是似懂非懂的状态,继续学习~
更多学习资源:
生信技能树公益视频合辑
生信技能树账号
生信工程师入门最佳指南
生信技能树全球公益巡讲
招学徒
...
你的宣传能让数以万计的初学者找到他们的家,技能树平台一定不会辜负每一个热爱学习和分享的同道中人