前言:
现时同学们对“r语言cor函数的用法及实例”都比较注重,我们都需要分析一些“r语言cor函数的用法及实例”的相关知识。那么小编在网摘上收集了一些关于“r语言cor函数的用法及实例””的相关文章,希望同学们能喜欢,兄弟们一起来了解一下吧!嗨,大家好,我就是帅气的小编~
R语言是进行统计分析和可视化的优秀语言(其实机器学习和网页制作也可以用R,小声说~|・ω・`))
相信大家在利用R语言进行数据分析的时候可能会有大数据分析需求。所谓大数据,很好理解,就是大样本高维度数据,这样的数据在当今信息爆炸时代,很是常见。比如医学数据,数据量大,维度极高,因为医学的检测指标多,而且随着基因测序特别是二代测序等高通量测序(High-throughput sequencing)技术的普及,能一次测上万的基因,这样就有几万的维度;各种真实世界的统计数据,这些数据比如汽车损耗、公司盈亏也有着大样本的特点。
那么大数据如此的多,批处理的需求就比较大了。R语言不考虑并行运算下的简单批处理实现方式就是for循环。
所以,今天就来教大家怎样掌握R语言的for循环o(^▽^)o
首先,你需要一个R,百度"R"就行,点击有官网标识的网站,进去下载就行
打开R或rstudio(都行,小编喜欢rstudio,支持代码补全、鼠标操作GUI等功能,用过就不再想用普通的R了)
在左侧光标处就可以输入你的代码了
for循环基本结构如下
for(变量 in 值){
}
for循环的逻辑是设定一个变量如x,x的改变范围在5到20(这个可以自己设),那么R就会自动执行{}里的内容,按x递增1的顺序执行,一直从5,6,7...到20为止。
那么接下来,小编就通过一个具体的例子来讲解for循环(′▽`〃)
代码都是本人自己写的哈~
首先编一个二维矩阵数据,这样的数据是很常见的(如果有现成的文件也可以用read.csv/read.table/read.delim读入data.frame格式的数据,再用as.matrix函数转为矩阵)
#这步是新建一个名为data的矩阵,matrix函数后面的c(1:5000)是矩阵填入的数据,是从1,2,3...一直填到5000,nrow是矩阵的行数,可以理解为number of rows,ncol是矩阵的列数,可以理解为number of columns,所以明白了为啥要填5000个数了吧(๑´ㅂ`๑)
data <- matrix(c(1:5000),nrow = 100,ncol = 50)
如图
可见1到5000是按列填充的,这就是R语言的一个特性,默认优先进行列运算~
我现在想要进行for循环了,首先明确我的目的是想计算每一行之间的pearson相关系数和P值,最后得到一个4列的data.frame并输出为csv,可用excel进行进一步编辑。4列的data.frame每一列依次是某一行的行名、与前者进行相关分析的另一行的行名、pearson相关系数、P值,那么让我们开始~
N1=c("gene1") #首先把最后4列的data.frame表头设定好,我这里用基因1表示,可以随你换
N2=c("gene2")
R=c("r") #相关系数
P=c("p") #P值
for (r in 1:nrow(data)){ #在下面的{}内r的范围从1到data的行数,即100
for (t in r:nrow(data)){ #在下面的{}内t的范围从1到data的行数,两个for叠加的话,先固定第一个for r=1再执行下一个for,直到下一个for的r从1到100都执行完后再跳到第一个for r=2,再执行r从1到100,再r=3以此类推直到r=100,整个for循环就结束了。这里用两个for很巧妙,这样可以规避计算了第r行与t行的相关数据及第t行与r行的相关数据,造成人为的重复运算
N3=rownames(data)[t] #data行名的第t个数据,这个很好理解,data行名rownames(data)是一个有100个数据的向量vector,从1到100依次是每一行的行名,这里[t]就取第t个数即第t行行名
N4=rownames(data)[r] #同上取第r行行名
R1=cor(as.numeric(data[t,]),as.numeric(data[r,]),method="pearson") #cor函数计算pearson相关系数,参数里依次是向量1,向量2,运算方法这里是pearson,向量1这里是data第t行的数据,保险起见转为了numeric即数值型,向量2这里是data第r行的数据
P1=cor.test(as.numeric(data[t,]),as.numeric(data[r,]),method="pearson")[[3]] #结构同上,这里是得到P值
N1=c(N1,N3) #把N1和N3合并为N1,这里N1最开始是gene1,后来每运行一次,就加上一个新的N3,也就是每运行一次,就得到长度加一的向量,加的部分就是相关分析中前者的行名
N2=c(N2,N4) #把N2和N4合并为N2,这里N2最开始是gene2,后来每运行一次,就加上一个新的N4,也就是每运行一次,就得到长度加一的向量,加的部分就是相关分析中后者的行名,注意N1和N2的顺序是一一对应的,因为N1和N2的顺序就是每次运行的顺序,即N1和N2的第3个数据都是第2次运算的结果
R=c(R,R1) #把N2和N4合并为R,这里R最开始是r,后来每运行一次,就加上一个新的R1,也就是每运行一次,就得到长度加一的向量,加的部分就是相关分析中相关系数
P=c(P,P1) #把N2和N4合并为P,这里P最开始是p,后来每运行一次,就加上一个新的P1,也就是每运行一次,就得到长度加一的向量,加的部分就是相关分析中的P值,注意R和P及N1、N2都是一一对应的,理由同上
}
}
Q=data.frame(N1,N2,R,P) #最后把N1,N2,R,P向量按列合并创建成data.frame,因为R和P及N1、N2都是一一对应的,按列合并不会打乱顺序,至于为啥是按列,这里就是前文说的R语言特性~
write.csv(Q,file="G:/PR1.csv") #输出为csv
这就是结果,为啥N1,N2不变呢?因为没有设定行名所以每次运算的N3、N4都是空的,所以N1,N2一直都是gene1和gene2。为啥R为1P为0呢?因为看了data就知道了(o≖◡≖)
怎么样,R语言for循环有意思吧︿( ̄︶ ̄)~,你学会了吗?不妨用自己的数据试试~
最后,学习程序语言,小编觉得理解代码逻辑非常重要(来自一个自学R语言、生物信息学和机器学习的临床医学生)
这是小编的第一篇文章,希望大家多多关注、支持,你们的支持是我走下去的动力
你们还想看怎样的文章,不妨在评论区谈一谈,对于R语言或者这篇文章其他内容也可以谈一谈~