前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >要读源代码才能解决的报错-GEOquery下载表达矩阵缺样本名

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

作者头像
生信技能树
发布2018-12-21 17:15:58
8210
发布2018-12-21 17:15:58
举报
文章被收录于专栏:生信技能树生信技能树

最近生信技能树的很多朋友反馈一个GEOquerybug,而且这个错误对初学者来说,是不可能解决的问题,值得分享一下!(2018-11-27 计)

就是昨天推文末尾的小测试: GEOquery包的getGEO函数总是无法下载肿么办

如下所示,他们下载的表达矩阵,的样本名字本来应该是gsm这样的ID,结果变成了第一个探针的表达量

我当时很诧异,因为没有遇到过这个问题,以为是他们瞎说,或者说网络问题,但是问的人实在是太多了,我只能重视起来了。

我检查了txt文档,发现没有问题。也检查了R版本GEOquery包的版本,也没有任何问题。

我仔细的把错误的与准确的下载结果对照,如下:

差异很微弱,就是里面的列的解析问题,所以我猜测应该是GEOquery包里面调用了其它函数的问题。

txt文件的表达矩阵如下:

那就找源代码咯!

源代码解析

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

代码语言:javascript
复制
git clone https://github.com/seandavi/GEOquery
## 读懂:GEOquery/R/parseGEO.R  文件

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

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

代码语言:javascript
复制
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包的问题,我就懒得管了,把该包降级即可解决。

GEOquery包作者已经意识到这个问题了

虽然GitHub有人在readr上面提issue,其实我认为应该是GEOquery应该是做修改,而不是readr去修改,比较GEOquery在依赖readr,不过GEOquery包的作者也接收到了反馈,意识到这个问题了。

代码语言:javascript
复制
## readr1.2.1对skip的处理方式。
ds <- datasource(data, skip = skip + isTRUE(col_names), comment = comment)

library(readr)                       
dat <- read_lines(fname)
series_table_begin_line = grep("^!series_matrix_table_begin", dat) 
datamat <- read_tsv(fname, quote='"',
                    na=c('NA','null','NULL','Null'), 
                    # somewhere in the past month or so, read_tsv changed
                    # the way it dealt with skip!!! Had to add the -1 to
                    # avoid the problem.
                    skip = series_table_begin_line - 1, 
                    comment = '!series_matrix_table_end')

也就是说需要在 series_table_begin_line - 1 才可以弥补 readrread_tsv 函数问题。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 源代码解析
  • GEOquery包作者已经意识到这个问题了
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档