一般我喜欢把文件储存成csv格式,然后用read.csv读取文件。
也有的人习惯储存数据为txt格式,然后用read.table读取文件。
但是当数据太大的时候,read.csv和read.table似乎就不适用了。
首先读取慢,而且读到最后会读一个寂寞。
比如下面这个文件:
有三个多G,用read.csv读取的时候,会发生什么状况呢?
setwd("D:\\")
dir()
data <- read.table("GSE149614_HCC.scRNAseq.S71915.count.txt",header = T,sep="\t")
##########
########## 我等了十几分钟,还没读进去 ################
我等了十几分钟,还没读进去。
当然也有可能是电脑的原因,如果是苹果电脑,可能会好点。
但是读到最后会发现,报错了。因为文件太大了,这里我就不向大家展示了,直接点击stop,结束运行:
我们再换一种方式读取:
library(readr)
read_table()
使用readr这个软件包里面的read_table,这个据说读取数据比read.table要快很多。
但是,面对三个多G的数据,还是慢,这里我就不展示了,大家可以自己去体验一下。
那么,面对这么大的数据,我们如何读取呢?
这里向大家推荐一个好用的函数fread。
fread,可以理解为:fast read (自创的)。
下面开始运行代码:
install.packages("data.table")
library(data.table)
dir()
data <- fread("GSE149614_HCC.scRNAseq.S71915.count.txt",sep = "\t",header = F)
fread这个函数再data.table中,如果要运行它,先下载一个data.table软件包。
可以看到,在读取的过程中能够看到进度条。
能看到进度条,就有盼头。
读取完数据以后我们查看一下文件:
dim(data)
class(data)
###############
> dim(data)
[1] 25712 71916
> class(data)
[1] "data.table" "data.frame"
可以看到数据有25712行,71916列,这比TCGA任何一个数据库的文件都大。
文件的类型既属于table,也属于数据框。
查看一下数据:
data[1:10,1:110]
> data[1:10,1:110]
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
1: RP11-34P13.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2: FO538757.2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
3: AP006222.2 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1
4: RP4-669L17.10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5: RP5-857K21.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6: RP11-206L10.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7: FAM87B 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8: LINC00115 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0
9: FAM41C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
用fread读取出来的数据,也是可以使用美元符提取列的,当然也可以进行数据匹配。
那么什么情况下会用到大样本的数据呢?
比如我们要用GTEx数据库进行分析正常人的组织样本测序数据。
又比如我们要分析单细胞的测序数据等。