掌握R语言for循环一文就够了(认真脸)

  R语言是进行统计分析和可视化的优秀语言(其实机器学习和网页制作也可以用R,小声说~|ω`))

  R语言

  相信大家在利用R语言进行数据分析的时候可能会有大数据分析需求。所谓大数据,很好理解,就是大样本高维度数据,这样的数据在当今信息爆炸时代,很是常见。比如医学数据,数据量大,维度极高,因为医学的检测指标多,而且随着基因测序特别是二代测序等高通量测序(High-throughput sequencing)技术的普及,能一次测上万的基因,这样就有几万的维度;各种真实世界的统计数据,这些数据比如汽车损耗、公司盈亏也有着大样本的特点。

  那么大数据如此的多,批处理的需求就比较大了。R语言不考虑并行运算下的简单批处理实现方式就是for循环。

  所以,今天就来教大家怎样掌握R语言的for循环o(^▽^)o

  首先,你需要一个R,百度"R"就行,点击有官网标识的网站,进去下载就行

  打开R或rstudio(都行,小编喜欢rstudio,支持代码补全、鼠标操作GUI等功能,用过就不再想用普通的R了)

  rstudio

  在左侧光标处就可以输入你的代码了

  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")郑州看心理医生哪家好http://www.hyde8871.com/

  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都是一一对应的,理由同上

posted @ 2022-01-04 13:48  顾延笙  阅读(3778)  评论(1编辑  收藏  举报