在大概了解了R语言和在自己电脑上安装了Rstudio之后,相信大家对学习使用R语言迫不及待了。接下来,我们会推出一系列的推文来帮助大家由浅入深的学习R语言,保证每一个同学在这系列推文结束的时候都能成为R语言编程的大牛。
R语言作为一种编程语言,在生物信息和生物统计学中应用非常广泛。学习R语言的初期和学习其他编程语言一样,我们首先要了解在R语言中的各种数据类型及其用法。R语言中有许多存储数据的对象类型,包括了标量、向量、矩阵、数组、数据框和列表。这些数据结构之间的关系如图1所示。
图1:R中的数据结构
下面我们就从向量开始,逐一学习每种数据结构。
1
向量vector
向量是用于存储数值型、字符型或逻辑型数据的一维数组(通俗的来讲,就是“一串”东西)。
向量的创建执行组合功能的函数c()可用来创建向量,c是英文concatenate的缩写,代表连接的意思,可以将多个散在的元素合并成一个向量。如图2所示:
图2:向量的创建和数据类型
向量的类型向量的类型包括数值型、字符型和逻辑型等等,我们可以通过上图中的函数typeof()可以用来查看数据类型,这里,a是数值型向量,b是字符型向量,c是逻辑型向量。
向量的索引所谓“索引(index)”就是获取向量中的某一个元素的内容。具体怎么索引呢?我们在创建向量之后,通过在方括号中给定元素所在位置的数值就可以访问向量中的元素。如图3所示:
图3:向量元素的访问
(注意:R语言中向量的第一个元素所在位置是1,不是0,和其它编程语言不同!)
图3中a[2:4]等价于a[c(2,3,4)],这里冒号:是一个非常重要的操作符,它可以用于生成一个连续的整数向量,这个用法在以后的学习会经常出现。
2
矩阵matrix
矩阵的创建矩阵是一个二维数组,和向量类似的是,矩阵中的每个元素也拥有相同的模式。可以用函数matrix()创建。如图4所示:
图4:矩阵的创建
图4中,我们通过matrix函数创建了一个按列填充的5行,4列的矩阵。有些同学可能会想创建一个按行填充的并且每行或者每列都有自定义的行列名的矩阵,这些可以通过修改matrix()中的参数实现。如图5所示:
图5:函数matrix()的参数
关于函数matrix()的详细用法,大家可以在Rstudio里面输入?matrix或者help(“matrix”)查看帮助文档。在之后的学习或者使用R语言的过程中,遇到新的函数,也可以用同样的办法查看帮助文档。切记:不会的东西就打问号?哦。
矩阵的索引创建好矩阵之后,对矩阵中元素的访问和向量很类似,如图6所示。
图6:矩阵元素的访问
对矩阵元素的访问而言,y[i,j]表示访问矩阵y中第i行,第j列的元素,图6中还展示了同时访问多列数据的方法,访问多行数据的情况与之类似。
3
数组array
在矩阵的学习中提到矩阵是二维数组,那么数组就是和矩阵类似的数据结构,但是数组的维度可以大于2。可以与函数array()创建,如图7所示:
图7:多维数组的创建
数组和矩阵的访问方式非常类似,这里就不给大家一一列举了,大家可以自己实际操作一下。同样的,关于函数array()的更多参数和用法,大家可以通过参看帮助文档的方法来了解更多。
4
数据框data.frame
数据框的构建在前面介绍的几种数据类型中,都只能包含同模式的数据,但是在实际的数据分析过程中,所有的数据类型都保持一致几乎是不可能的,比如在处理生物数据时,基因型和基因表达量就是两种完全不一样的数据类型。R语言中数据框(data.frame)作为一种相比于矩阵、数组更一般的数据类型,将成为你最常处理的数据类型。数据框的创建如图8所示:
图8:数据框的创建
如上图所示,通过data.frame()函数可以创建数据框,而且数据框中每一列的名称就是每一列向量的名称,当然这些名称也可以自己修改,感兴趣的同学可以试着学习一下函数colnames()。
数据框的索引数据框中元素的访问有两种方法,一种和之前提到的矩阵、数组的访问方式一样,通过元素在数据框中的位置来访问,比如pdata[i,j];另一种则可以用到数据框的列名加符号即可索引。具体方法如图9所示,这里pdatastatus中的记号,被用来选定数据框中某一列。
图9:数据框中元素的访问
以下内容了解即可:大家会发现,status在pdata中出现时,被附加了一个levels属性,这是因为在R中变量又可以分为名义型、有序型和连续型,比如pdata中的age就是连续型变量,treat就是名义型变量,而这里例子中定义的status就应该是一个有序型变量。名义型和有序型变量都是类别变量,图9中的levels就代表了status有三个类别:poor、improve、perfect。将status定义为一个有序型变量需要用到函数factor()。如图10所示:
图10:有序型变量的定义
名义型和有序型变量在R语言的应用也相当广泛。函数factor()的用法和参数也不在这里一一展开了。
5
列表list
列表的创建最后一种数据类型是列表(list),也是R语言中最复杂的一种数据类型。一般来说:列表就是一些对象的有序集合,比如:某个列表中可能是若干变量、矩阵、数据框,甚至其他列表的组合。列表可以用函数list()来创建,如图11所示:
图11:列表的创建
列表的索引列表中元素的访问和矩阵、数组很类似,观察图11,相信大家也能猜到列表的元素访问方法了。具体的访问实例如图12所示:
在图12中,mylistdata和mylist[[2]]都访问同样的向量,这意味着列表中的元素访问是非常灵活的,这使得列表成为R语言中重要的数据结构。
图12:列表的访问实例
许多R函数的运行结果都是以列表的形式返回的,结果中的信息则由你自己根据实际情况来取舍了。
小结这次的课程给大家介绍了R语言中的各种数据类型,内容比较多,对大家要求较高,希望各位能够花点时间自己动手操作一下,操作不熟练的同学,文末有本节课程的测试代码哦~~
下次会给大家带来数据的导入,这样在下次课程之后大家就可以开始用R语言处理自己的数据了。希望随着课程的推进,大家可以举一反三,更好的理解自己的数据背后隐藏的信息。
本期干货
·
R语言常用语法代码示例
资源获取方法新规