ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-04 14:05:38  阅读:288  来源: 互联网

标签:一文 数据 行名 就够 循环 N1 N2 data 向量


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

标签:一文,数据,行名,就够,循环,N1,N2,data,向量
来源: https://www.cnblogs.com/gyshht/p/15762169.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有