要读源代码才能解决的报错-GEOquery下载表达矩阵缺样本名

最近生信技能树的很多朋友反馈一个GEOquery的bug,而且这个错误对初学者来说,是不可能解决的问题,值得分享一下!(2018-11-27 计)
如下所示,他们下载的表达矩阵,的样本名字本来应该是gsm这样的ID,结果变成了第一个探针的表达量。

我当时很诧异,因为没有遇到过这个问题,以为是他们瞎说,或者说网络问题,但是问的人实在是太多了,我只能重视起来了。
我检查了txt文档,发现没有问题。也检查了R版本,GEOquery包的版本,也没有任何问题。
我仔细与准确的下载结果对照,如下:

差异很微弱,就是里面的列的解析问题,所以我猜测应该是GEOquery包里面调用了其它函数的问题。
txt文件的表达矩阵如下:

那就找源代码咯!

源代码解析

首先在谷歌搜索里面找到其源代码路径:

 git clone https://github.com/seandavi/GEOquery
 ## 读懂:GEOquery/R/parseGEO.R 文件

查看源代码需要一定的耐心:

查询到下面的代码,是关于表达矩阵列的解析的。

 fname='GSE76275_series_matrix.txt.gz'
 AnnotGPL=FALSE
 destdir=tempdir()
 getGPL=TRUE
 parseCharacteristics=TRUE
library(readr )
 dat <- read_lines(fname)
 ## get the number of !Series and !Sample lines
 series_header_row_count <- sum(grepl("^!Series_", dat))
 sample_header_start <- grep("^!Sample_", dat)[1]
 samples_header_row_count <- sum(grepl("^!Sample_", dat))
 series_table_begin_line = grep("^!series_matrix_table_begin", dat)
 ## colClasses <- c('character',rep('numeric',nrow(sampledat)))
 datamat <- read_tsv(fname,quote='"',
 na=c('NA','null','NULL','Null'), skip = series_table_begin_line,
 comment = '!series_matrix_table_end')
 datamat[1:4,1:4]

同样的代码我在6台电脑上面都跑了一次,居然是read_tsv 函数的问题,而这个函数来自于readr包,所有准确无误的电脑里面readr都是1.1,而错误的都是1.2版本。
正确的读取信息如下:

同样的反馈我们也在GitHub看到了:https://github.com/tidyverse/readr/issues/925
既然是readr包的问题,我就懒得管了,把该包降级即可解决。

Comments are closed.