关于R语言的数据类型和数据结构的如何区分

Python014

关于R语言的数据类型和数据结构的如何区分,第1张

注意区分: 数据类型 数据组成类型(数据结构)

数据类型 :整型、浮点型、字符型、布尔型(不同的语言不同的叫法)

数据结构向量(c())、矩阵(matrix())、数组(array())、列表(list())

注意:这里把 数据框 单拿出来讲(因为它比较特殊)

接下来通过一个实例讲解一下 S4数据结构 。这是我采用clusterProfiler做KEGG富集分析时的一个结果,其采用 S4数据结构 形式存放:

R语言中矩阵、向量在内存上的区别

向量

在初始创建时,系统就给分配了足够的空间,没有赋值的下标对应的值都用NA代替了,所以向量不存在下标超出的限制比如:

>x

[1] 1 2

>length(x)

[1] 2

>x[100]

[1] NA

>length(x)

[1] 2

>x[100]=3

>length(x)

[1] 100

创建x时给了两个数字,所以长度为2。但是取值x[100]时显示的是NA并非下标越界,当赋值x[100]=3时,x的长度变为了100。

这种性质的好处就是可以取代向量的重新赋值语句比如:

>x<- c(x,2)

可以使用以下语句代替:

>x[length(x)+1]=2

这样的好处就是由于不用重新赋值,不需要重新分配内存,因此可以大大提升程序的效率,比如:

>create_vector2<-function(k)

+ {

+ gh=c()

+ for(i in 1:k){

+ gh=c(gh,i)

+ }

+ return(gh)

+ }

>create_vector1<-function(k)

+ {

+ gh=c()

+ gh[1:k]=1:k

+ return(gh)

+ }

以上为两个创建向量的函数,运行时间测量如下:

>system.time(create_vector1(10000)) #创建10000长度的向量,函数1运行时间

用户 系统 流逝

000

>system.time(create_vector2(10000)) #创建10000长度的向量,函数2运行时间

用户 系统 流逝

0.11 0.00 0.11

>system.time(create_vector1(100000)) #创建100000长度的向量,函数1运行时间

用户 系统 流逝

000

>system.time(create_vector2(100000)) #创建100000长度的向量,函数1运行时间

用户 系统 流逝

11.48 0.01 11.71

可以看到函数1明显比函数2快很多。函数1的运行时间基本为0。

矩阵

矩阵并没有这种性质,矩阵的内存空间是初始创建空间的大小。一但确定,只有通过重新赋值来改变。所以会出现下标越界等错误。

R语言数据结构主要有以下四种:

四种数据结构,重点掌握 向量 数据框

判断数据结构的函数: class()

向量的详细讲解在上一篇文章,以下主要讲数据框,矩阵,列表:

以下大部分操作使用的数据框为df

几个重要的函数:查看数据框的行数和列数,行名和列名;以及单独查行的数量,列的数量

数据框取子集有几种方法 : $ 符号,坐标,名字,逻辑值

在 [,] 里,行在前面(左边),列在后面(右边),行与列用逗号 , 隔开: [行,列]

中括号里的逗号,表示维度的分割

数据框按照逻辑值取子集,TRUE对应的行/列留下,FALSE对应的行/列去掉。

修改第二列的列名,就是修改列名这个向量的第二个元素

https://blog.csdn.net/weixin_39718006/article/details/110516670

后续的笔记会有详细介绍

矩阵不能用 $ 符号取子集

t():转置函数,行与列的互换

as.data.frame():转换,把矩阵变为数据框 ,用as.matrix()函数也能把数据框变为矩阵

聚类,相似的行,相似的列会聚在一起。热图自动聚类,行和列的相对位置发生了变化,只是列与列,行与行之间的变化规律。

![热图自动聚类]]( https://upload-images.jianshu.io/upload_images/17511166-f6e2432a04cffbbe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )

热图默认聚类,修改参数,不让聚类,热图与表达矩阵对应。

默认的设置不符合自己的预期,可以子啊作者允许的范围内定义。

查看函数帮助文档,参考修改,达到自己的要求。

列表没有列名和行名,只有元素的名字。列表可以由数据框,矩阵,向量,单独的一个数字都可以组成。

列表没有行和列的概念,只有元素,取子集的两种方式: [[]] , $ ,

$ 有两个作用:数据框取子集和列表取子集。在矩阵和向量里不能用 $ 。

用 class() 函数更能具体说明问题, 判断数据结构和数据类型

以上内容是听 生信技能树 小洁老师的 R语言线上课 ,根据自己的理解记录下来,小洁老师授课非常细心,对不同水平的同学都照顾到,并且补充很多技巧以及注意事项。

认识R语言的四种数据结构,小洁老师强调重点掌握向量和数据框,在实战中遇到很多数据结构都是数据框,表达矩阵可以转化为数据框,数据框的一列可以看做是一个向量。小洁老师把实战中会需要的操作融入到练习题,在实战中能联想起小洁老师讲过的知识点。