0
点赞
收藏
分享

微信扫一扫

数据太大的时候,R语言如何读取?

荷一居茶生活 2022-04-16 阅读 40

 一般我喜欢把文件储存成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数据库进行分析正常人的组织样本测序数据。

又比如我们要分析单细胞的测序数据等。

举报

相关推荐

0 条评论