[生信入门笔记]2.生信相关R语言基础

参考视频:
说在前头:注意,学习编程语言的基本逻辑就是动手自己试一试。所以我建议大家亲自动手敲(不是复制)并执行每一行代码,这样学习才会事半功倍。
安装 R 包
你可知安装R包有那三样写法?
从 CRAN 安装
CRAN 是 R 语言的官方综合档案网络,也是最主要、最基础的 R 包发布平台。
其特点是 CRAN 对提交的包有严格的质量、文档和兼容性审查,因此这里的包通常稳定且维护良好,适用于大多数通用场景。
安装方法:
1 | |
从 Bioconductor 安装
Bioconductor 是一个专注于生物信息学的开源软件项目,为基因组数据分析(如 RNA-seq、单细胞测序等)提供大量高质量的R包。
其特点是这里的包高度集中于生物信息学领域,能处理高通量生物学数据,且包之间集成度高,通常每年更新两次
安装方法:
1 | |
从 Github 安装
GitHub 是一个面向开源及私有软件项目的代码托管平台,并非R专用。
其特点是许多 R 包在正式发布到 CRAN 或 Bioconductor 之前,会先在 GitHub 上进行开发和分享。因此,这里的包通常包含最新、最前沿的功能,但可能不够稳定。
安装方法:
1 | |
R script 脚本一般的初始化流程
初始化应:
- 修改报错为英文报错
- 禁止转化为因子
- 清空环境
1 | |
数据结构与数据类型
数据结构
R 语言有5种基本的数据结构
- 向量 Vector
有序、一维的数据 - 矩阵 Matrix
要求各列数据类型相同 - 数组 Array
- 数据框 Data frame
各列的数据类型可以不同
数据类型
- 字符型 Character
- 数值型 Numeric
包括小数 - 整型 Integer
- 复数型 Complex
- 逻辑型 Logical
即布尔型:TRUE/FALSE
向量 Vector
向量由元素组成,所有元素必须属于同一类型(数值型、字符型、逻辑型)。
1 | |
我们可以使用 class 函数判断数据类型
1 | |
执行得出结果:
向量的元素可以被索引。在R语言中,向量的索引(Indexing) 就是通过位置、条件或名称,从向量中提取出你需要的特定元素。
- 正整数索引(按位置取)
最基础的用法,传入一个或多个正整数,提取对应位置的元素。
1 | |
执行得出结果:
同样的,我们也可以对索引的对应元素进行赋值
1 | |
继续上面的代码执行得:
- 负整数索引(剔除/反选)
在索引前加 - 号,表示剔除该位置的元素,返回剩余所有元素。注意:正整数和负整数不能混用。
1 | |
继续上面的代码执行得:
3. 逻辑索引(条件筛选)
是生信中最常用的索引方式。传入一个与向量长度相等的逻辑值向量(TRUE/FALSE),R只返回对应位置为 TRUE 的元素。这是配合比较运算符进行筛选的核心手段。
1 | |
- 字符索引(按名称取)
如果向量有名称属性(names),你可以直接使用字符串来提取,而不用记住位置。这在提取特定基因时非常直观。
数据框 Data frame
矩阵 Matrix 其实是数据框的一种特殊形式(数据类型一致)。
R 中数据的储存与读取
数据的读取
- 文本数据的读取
文档可以用文本编辑器或者 Excel(推荐)打开。
若要将此文档读取入 R studio 项目中,可以使用 read.table 或 read.csv 函数进行。此处请手动下载GPL570的平台信息到项目目录。
1 | |
可以观察到,该数据表已经被成功读取。
如果使用read.csv读取数据。数据前面的元数据必须跳过,不然会出现错误!
1 | |
如果需要将第一列作为row name, 则需要添加如下参数。
1 | |
⚠️如果出现下图的报错信息,请查看 quote = “” 参数是不是成功指定。
为什么会有这个错误?
警告(EOF within quoted string):你的文件(GPL平台注释文件)中,某些列(通常是基因描述或探针序列)里包含了双引号 “,且不成对。R 在读取时误以为字符串还没有结束,于是会把后面几行的内容吞并到当前行,导致整个表格结构错乱。
错误(重复行名):结构错乱后,R 把本该是多行的数据合并成了一行,导致读取到的有效行数变少,而第一列(探针ID)原本是唯一的,但因为合并,现在出现了很多 NA 或重复片段,R 检测到重复值,直接报错终止。
quote = “” 在读取时忽略文件中的引号,把引号当作普通字符处理。
- fread函数
fread() 是 R 语言 data.table 包中的一个函数,用于快速、便捷地读取表格数据。你可以把它看作 read.table() 的“超级加速”版,可以运用多线程读取数据。
它的一大特点是高度自动化,大多数情况下,你只需提供文件名,它就能自动处理分隔符、表头、列类型等繁琐细节
使用 fread 函数需要使用 data.table 包。
1 | |
理论上来说,fread 可以自动识别你的分隔类型(无论是 Tab 还是符号),sep 参数可以缺省。data.table 的缺省值为 TRUE,返回的是一个 data.table 结构,而我们需要的是数据框,所以必须改为 FALSE。
1 | |
实操下来,fread读取数据相比前面两种方法快了很多,这是fread函数的多线程特性造成的。
突然发现,anno1 和 anno2 对比后面的 anno3~5 少了整整 2.6w 行,说明我们实际使用下来,应该使用后面的几种方法。(具体原因大家自行研究吧!)
- 数据的提取
此时,我们得到的 anno 为数据框(可以使用 class 函数确认。我们一般使用 colnames 与 rownames 获取数据框的行名与列名,此时,得到的是字符型的向量。
1 | |
我们可以对anno的行名或列名进行手动的修改。
1 | |
此时,完成了修改。
如何读取某一部分特定的数据?
根据先前的经验,我们可以使用中括号 [] 进行读取。
1 | |
值得注意,如果查看n3、n4的类型,我们可以发现,n4是向量,而n3是数据框。
所以,数据框的基本单位是由等长的向量(列)构成的。而提取的行是一个数据框。
如果使用anno[1]提取,则提取到的列是一个数据框。
当然还有另外一种读取方式:使用 $ 符号提取某一列。如果名称中含有空格,需要加上引号。
1 | |
如果想增加某一列(含列名),也可以使用 $ 符号。
1 | |

综上,R 语言含有两种提取规则:按序号提取与按名称提取。
- 创建数据框
可以使用 data.frame 创建数据框。
由于数据库的特性,数据库的创建按列构成。
1 | |
列表
R语言中的列表与R语言中的向量、数组和矩阵不同,它的每个分量的数据类型可以是不同的。列表是对象的集合,可以包含向量、矩阵、数组,数据框,甚至是另外一个列表,且在列表中要求每一个成分都要有一个名称。列表中的对象又称为它的分量(components)。
- list 的创建
列表使用 list 函数创建。
1 | |
- list 数据的提取
使用双中括号 [[]] 提取某一组元素。
1 | |

此时提取出的是一个字符向量,可以使用list1[[1]][1]提取"Data_7"。也可以使用list1[["score"]]提取score所包含的元素。
如果我们对第一节课
1 | |
所得到的 gset 变量使用 class 函数查看类型,可以发现我们通过 getGEO 获取的数据是以list形式储存的。我们同样可以使用上述方式进行数据的读取。
1 | |
下节预告
- 生存曲线
- 7月26日:今日学习生信第二课。
- 7月27日:玩游戏。
- 7月28日:无事,玩游戏。
- 7月29日:Data_7啊Data_7!你怎么能如此堕落!先前定下的学习计划你都忘了吗?子曰:“吾日三省吾身。”不能再这样下去了!
- 7月30日:玩游戏?