今天是生信学习的第五天,今天学习了R语言的数据结构。
R拥有许多用于存储数据的对象类型,包括向量、标量、矩阵、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同。
----源于《R语言实战》(第二版)
今天关于数据类型的学习主要体现在两个方面:向量和数据框
1. 向量
1.1 创建向量
向量是用于存储数值型、字符型或逻辑型数据的一维数组。通过函数 c() 可以创建自己需求的向量。如:
> a<-c(1,2,3,4,5)
> a
[1] 1 2 3 4 5
> a<-c(1,2,"hello",4,5)
> a
[1] "1" "2" "hello" "4" "5"
我先创建了一个由1,2,3,4,5组成的向量a,输入a就能得到一组数组;然后我继续创建了一个由1,2,"hello",4,5组成的向量,而且仍然命名为a,再输入a,结果就变成了后一种结果,这表明,一个变量,无论经过多少次赋值,最终的结果总以最后一次赋值为准。
1.2 从向量中提取元素
有时候,我们创建的向量所包含的元素很多,但是在一些情况下我们只需要其中的部分元素,那么我们就需要学会如何从中提取元素。从向量中提取元素的方式有两种:
根据元素位置
> a[3]#表示向量a的第三个元素
[1] "hello"
> a[2:4]#表示向量a的第二到第四个元素
[1] "2" "hello" "4"
> a[c(1,5)]#表示向量的第1、5个元素
[1] "1" "5"
根据值
> a[a==5]#输出向量a中元素值为5 的向量
[1] "5"
> a[a=="hello"]#输出元素为“hello”的字符元素
[1] "hello"
> a[a<5]#表示输出向量a中<5的元素(字符元素“hello”除外)
[1] "1" "2" "4"
2. 数据框
相比简单的向量,数据框就要复杂的多。它包含不同的列,且不同的列可以包含不同模式的数据(数值型、字符型、逻辑性)。数据框可以通过函数data.frame()来创建,函数用法如下:
赋值的变量x<-data.frame(col1、col2、col3···)col表示列名。
2.1 读取本地数据
如果每次都是新建数据框,会显得很繁琐,所以有时候会采取直接利用现成的数据文件,这就需要学会如何去读取本地文件。read.table()函数可以读取表格格式文件并将其保存为一个数据框。
> read.table(file="huahua.txt",sep="\t",header = T)
Error in file(file, "rt") : 无法打开链结
此外: Warning message:
In file(file, "rt") : 无法打开文件'huahua.txt': No such file or directory
当我使用函数read.table()读取huahua.txt文件时,出现了报错,无法打开文件,这是因为这个文件我并未保存在R的工作目录下,导致读取失败。当我将文件转移到工作目录后就能成功导入文件。
> read.table(file="huahua.txt",sep="\t",header = T)
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> a<-read.table(file="huahua.txt",sep="\t",header = T)
其中header参数的含义是:表示文件是否在第一行包含了变量名的逻辑型变量;
sep含义为:分开数据值的分隔符。默认是sep“ ”,这表示一个或多个空格、制表符、换行或回车。使用sep=“,”来读取用逗号来分隔行内数据的文件,使用sep=“\t”来读取使用制表符来分割行内数据的文件。
2.2 设置列名和行名
> X<-read.csv('doudou.txt')#读取doudou.txt文件为数据框
> X
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> colnames(X)#查看列名
[1] "X1" "X2"
> rownames(X)#查看行名
[1] "1" "2" "3" "4" "5"
> colnames(X)[1]<-"bioplanet"#将列名的第一列名称改为bioplanet
> colnames(X)
[1] "bioplanet" "X2"
行名和列名的更改方式也是如此。
2.3 导出数据框
> write.table(X,file="xiang.txt",sep = ",",quote = F)
通过write.table()函数将X数据框导出为xiang.txt到当前工作目录下。
2.4 变量的保存与重新加载
> save.image(file = "bioinfoplanet.RData")#保存当前所有变量为bioinfoplanet.RData
> save(X,file="test.RData")#仅仅保存当前所有变量中的X变量为test.RData
> load("test.RData")
此处save和save.image的用法有一些区别,后者是一种快捷操作,表示保存当前环境所有变量,前者是有选择性的选取变量进行保存。
2.5 提取数据框中的元素
X[1,2]#表示提取第一行第二列
X[1,]#表示提取第一行
X[2]#表示提取第二列
提取元素的方式和提取向量中的元素差不多,只是需要多考虑一点,及行和列。
2.6 直接使用数据框中的变量
比如以数据框中的两列做散点图,常规方法可能是这样:
a <-data.frame(case=paste("S",1:50)),values=runif(50))
plot(a$case,a$values)
a就是一个数据框,需要使用其中的两列作图,这也就需要输入变量a多次,当变量名很长时,会很繁琐,所以就有了下面两种更简单高效的方法。
attach法
attach(a)
plot(case,values)
detach(a)
通过attach将数据框加到搜索环境中,然后直接作图,不需要输入数据框名。使用完毕后需要detach不然可能跟会和后面的操作出现冲突
with法
> with(mtcars,{
+ plot(mpg,wt)
+ })
用with函数可直接将需要的变量写到一起,完成调用。
3. 问题:
save(X,file="test.RData")这句代码如果报错X not found,是为什么,应该怎么解决?
我认为可能存在两种情况,一是x这个变量的大小写弄混了,导致出错;二是在本环境中并不存在X这个向量。