R语言的数据结构类型主要包括数向量,矩阵,数组,数据框和列表5种数据类型。下面简要总结一下每种数据类型的特征和常用操作。
1.向量(vector)
向量是由同一种数据类型(数值,字符,逻辑,复数)组成的最简单的一维的数据容器。
生成向量:
v<-1:3=c(1:3)=c(1,2,3)
:是取值范围操作符,c函数将括号里的所有元素变成一个向量,向量具有顺序。
向量取值:
中括号是所有容器按照索引取值的操作符
v[1:2]=v[c(1,2)]
中括号里是index,R里的索引从1开始,这里取多个值实际上用到也是向量
v[-1]取值除开第一个
v[-1:-3]取值除开第一到三个值,注意跟python的倒数操作不一样
索引也支持逻辑判断
v[v<1]取出向量v中小于1的值
which(v==1)返回的是向量中为1的索引
向量运算:
R里的向量运算都是点对点的,例如1:2 + 3:5,结果是4,7
2.矩阵(matrix)
向量是一维的,矩阵就是二维的,同样要求数据类型一样。
生成矩阵:
m=matrix(10,nrow=5,ncol=2,byrow=T)
这个矩阵是5行2列,按照行从1到10填充
矩阵取值:
取值的关键在于找到对应的索引,因为矩阵是二维的,因此索引也是x,y类型的一个坐标。
m[1,2]第一行第二列
m[1,]矩阵的第一行,x,y某个值不写默认取全部,这里表示第一行,要所有的列,实际就是第一行
m[c(3,1),2]索引同样支持范围操作,这里是第3行2列和1行2列
添加行列名
rownames(m)现在矩阵m是没有行名的
rownames(m)=c(‘a’,‘b’,‘c’,‘d’,‘e’)
colnames(m)=c(‘gene’,‘fpkm’)
3.数组(array)
矩阵是二维的,相当于一个表,那么array就是多个表。同矩阵一样要保证数据类型一样。
生成数组:
a=array(1:24,dim=c(2,3,4))
生成4个2行4列的矩阵,从1到24填充
4.数据框(data.frame)
矩阵和数组存储的数据只能是数值
而data.frame存储的类型就丰富了,这是R最常用的数据结构,read.table读入数据就是这个格式。data.frame,每一列是一个独立属性,但是要求每一列长度一样。
a=c(1:3)
b=c(‘a’,‘b’,‘c’)
f=data.frame(a,b)
引用某列,f
a
在
a 在
a在后直接加列名
data.frame可以使用attach,deattach,简化变量引用,attach(f)之后,a即可代表a列。
5.列表(list)
list是R中最复杂的数据结构,包含更多存储形式,可以囊括上述所有数据结构类型,对每一维数据的长度也没有要求,这非常类似excel。
生成列表:
l=list(1:8,c(‘a’,‘b’),matrix(1:9,3,3))
取值,对于列表的取值,R采用双中括号,例如取出矩阵
l[[3]]
R里面之所以有如此多的数据结构类型,其实是在易用和灵活之间权衡,数据结构越简单可能用起来越简单快捷,但是失去了更多功能;数据结构越复杂,功能和灵活性强大了,但是易用性有了折扣。总之,结合具体需求合理选择相应的数据容器存储你的数据吧。