R---数据以及数据的结构

Python015

R---数据以及数据的结构,第1张

在R中,常见的数据类型一共有5种:

字符型character,

数值型numeric,

整形integer,

复数型complex,

逻辑型logical

还需要注意的是,如果我们直接输入1,2,3,4...得到的是numeric类型。如果想要输入integer类型,需要输入1L,2L,3L,4L...

Inf表示无穷大,-Inf表示无穷小。

同理1/0表示无穷大,-1/0表示无穷小

如果输入0/0则会得到Nan这样的显示,Nan表示在计算的时候出现错误。

而如果出现Na则表示缺失值。我们可以认为Na包含了NaN。

在R语言中,常见的数据的结构有以下几种:

向量,列表,矩阵,数组,数据框,因子

特点:相同类型,序列

如何创建向量?

1、创建初始向量:vector(‘数据类型’,数据个数),例如,我们输入:x<-vector('numeric',10),可以得到如下结果,可以看到x的类型为数值型numeric。

2、用vector其实等同于直接用数据类型后面跟数据个数,上面的例子其实就可以写成numeric(10),运行之后可以得到相同的结果:

3、如果需要创建的向量是等差为1的等差数列,如1到20的数列,我们可以直接写成:

1:20

4、更多情况下,我们用c()函数用来创建向量,把数据对象连结在一起(concatenate)

例如:

c(1,2)

如上图可见,这里的数据类型class显示的是“numeric”,说明c(1,2)生成的向量里面的数据类型是数值型,而非整形integer。如果想要得到整形的向量,我们需要输入:

c(1L,2L)

如果输入c(TRUE,FALSE,FALSE,TRUE),得到逻辑型向量

如果输入c('初中','高中','大学'),得到文本型向量

注意

就像我们之前提到的,向量里面必须得是相同类型的数据。如果在创建向量的时候,输入了不同类型的数据,R会强制将不同类型的数据转换成相同的数据类型。

例如,输入c(1.7,'a'),最后生成的结果如图,1.7被转成了字符型,我们也可以从class里面看到类型是字符型character。

输入c(T,2),最后生成的结果如图,T由逻辑型转成了数值型。

输入c("a",T),得到的结果如图所示,T由逻辑型转成了字符型。

上面提到的这几种转换,通常都是R强制地悄悄地执行的。如果我们自己想要转换数据类型,则应该应用:

as.numeric/logical/character/complex(向量名) 来进行转换。

特点:列表和向量相同的地方在于,二者都是序列;不同的地方在于,列表是由不同类型的对象组成的,而向量则由同样类型的数据组成。

写作:list(name1=object1,name2=object2,…)

例如:输入x<-list(1,'a',T,b=c(1+4i,2-3i)),我们可以明显看到list()里面的每个部分类型都不同(数值,字符,逻辑值,向量),输出结果如图:

是一类特殊向量,维度属性。

matrix(数据, nrow = 几行, ncol = 几列, byrow = FALSE/T是否按行排列, dimnames = list(c(行名),c(列名 )))

斜体的部分表示可以不写。

例如,我们想要输入1-8,2行,4列,按照行排列,行名为张三、王五,列名为吃喝玩乐。可以得到如下图:

matrix(1:8,2,4,byrow=T,dimnames = list(c('张三','王五'),c('吃','喝','玩','乐')))

矩阵还有另外一种方法可以创建,用cbind() rbind()创建

例如有x,y两个向量。cbind()是按照列来连接xy(x一列,y一列)rbind是按照行连接xy(x一行,y一行)

注意 :如果用rbind()来合并矩阵或者向量或者表格,必须要求二者列名一致

矩阵还有另外一种方法可以创建,创建一个向量,而后添加维度

t()表示矩阵的转置

array,和matrix最大的区别在于array的维度更多,有三个维度。

我们可以理解为matrix有行、列两个维度;但是array多了一个面板维度(分成几块)。

array(数据,dim=c(几行,几列,几块),dimnames = list(c(行名),c(列名),c(板块名)))

例如:

array(1:12,dim=c(2,3,2),dimnames=list(c('从前','现在'),c('衣','食','行'),c('北京','上海')))

得到如下结果:

数据框是R的一个重要数据类型,用来存储表格数据。可认为是特殊类型的列表,列表中每个元素(每类)都有同样的长度。每一列可以是不同的类型(矩阵是相同的)。可以通过调用data.matrix()将数据框转化为矩阵。

数据框很像我们在使用SQL的时候来定义表格之后,给表格中的各列赋值的情况。

data.frame(列1=向量,列2=向量)

例如:data.frame(foo=1:4,bar=c(T,T,F,F))

nrow(x)----x有几行

ncol(x)----x有几列

特点:用于创建分类数据,两种类型:有序/无序。

可以写成这样的形式:

factor(c("第一类","第二类","第三类",...),levels=c("第一类","第二类","第三类"),ordered = T)

ordered默认为F。

例如:factor(c("小学","初中","高中","小学"),levels=c("小学","初中","高中"),ordered = T)

得到如下结果:

我们如果不对level进行定义,出现如下结果:

此时虽然有比较,但是初中<高中<小学,这样的结果是根据字母发音排序的结果,或许并不是我们想要的,所以如果我们对排序有要求,还是要对levels进行定义。levels=c("第一类","第二类","第三类"),理解为

"第一类"<"第二类"<"第三类"

我们如果不对ordered进行定义,出现如下结果:

此时为无序数据,无比较。

我们还有另外一种方法来定义因子:gl

gl(有几类, 循环几次, labels = c("第一类名称", "第二类名称"),ordered=T)

例如:gl(2,4),表示有两个变量(2),每一个循环4次

例如:gl(2, 8, labels = c("女", "男"),ordered=T),表示有两个变量,各循环8次,这两个变量分别表示为“女”和“男”,排序。

注意,这里和上一个例子一样,本来应该是给出两个变量用1和2表示,labels相当于给1和2加了“女”和“男”的标签。所以排序之后显示“女”<“男”,其背后真实的情况是1<2 。

例如: gl(2, 8, labels = c("女", "男"),ordered=T,length=32),在以上的基础上,规定一共有32个对象

通过我们以上的论述,我们知道了5种数据类型和几种常见的对象形态。

这些是R中非常基础但是十分重要的内容,需要多看几遍才能记得更清楚。

你是不是用R Gui安装的,提示已经说了缺少quadprog依赖包,

用R Gui安装的话需要先把依赖包一个个安装上,比较麻烦,

可以在Rstudio上安装,

install.packages('tseries')

also installing the dependencies ‘quadprog’, ‘zoo’

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/quadprog_1.5-5.zip'

Content type 'application/zip' length 52439 bytes (51 KB)

downloaded 51 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/zoo_1.7-13.zip'

Content type 'application/zip' length 899932 bytes (878 KB)

downloaded 878 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/tseries_0.10-35.zip'

Content type 'application/zip' length 327381 bytes (319 KB)

downloaded 319 KB

package ‘quadprog’ successfully unpacked and MD5 sums checked

package ‘zoo’ successfully unpacked and MD5 sums checked

package ‘tseries’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in

C:\Users\yuexf\AppData\Local\Temp\RtmpqqGpKz\downloaded_packages

>library(tseries)

‘tseries’ version: 0.10-35

‘tseries’ is a package for time series analysis and computational finance.

See ‘library(help="tseries")’ for details.

它会自动把依赖包给你安装上

加权基因共表达网络分析 (WGCNA, Weighted correlation network analysis)是用来描述不同样品之间基因关联模式的系统生物学方法,可以用来鉴定高度 协同变化 的基因集, 并根据基因集的内连性和基因集与表型之间的关联鉴定候补生物标记基因或治疗靶点。

相比于只关注差异表达的基因,WGCNA利用数千或近万个变化最大的基因或全部基因的信息识别感兴趣的基因集,并与表型进行显著性关联分析。一是充分利用了信息,二是把数千个基因与表型的关联转换为数个基因集与表型的关联,免去了多重假设检验校正的问题。

以上内容引用的网页:http://blog.genesino.com/2018/04/wgcna/#wgcna%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5

感觉WGCNA挺合自己脾气的,想安装一下。注定安装不会那么顺利。

安装了WGCNA是在Rstuio上安装的。用命令 install.packages("WGCNA")

执行完命令后,提示信息显示有三个依赖包(‘impute’, ‘preprocessCore’, ‘GO.db’)无法安装。

然后再安装那三个依赖包。

 BiocManager::install("impute"),安装impute时,也会安装GO.db包。遇到是否更新其他R包时,选择不更新 n.

>library("WGCNA")

Error: package or namespace load failed for ‘WGCNA’ in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]):

 不存在叫‘preprocessCore’这个名字的程辑包

然后再安装一下‘preprocessCore’包

BiocManager::install("preprocessCore")

做完以上工作,再执行一下 >library("WGCNA").

其中提示信息:载入需要的程辑包:dynamicTreeCut  ;载入需要的程辑包:fastcluster ;载入程辑包:‘fastcluster’    意思是在使用WGCNA时,需要先载入这三个包,并且已经被直接载入了,不是错误信息。