问题描述

使用R包GEOquery v2.72.0时,出现使用curl下载超时的问题(超过120s就会报错),具体情况如下图


代码

gse <- getGEO(GEO = "GSE129374",destdir ='./data')

排查过程

首先排查网络问题,科学上网后发现还是会出现这个错误。报错的提示中表示downloadFile函数报错。选择去查找downloadFile和getGEO函数的调用关系。

首先进入getGEO函数内部(rstudio等ide按住ctr+鼠标点击函数可以进入包的代码块,或者到github去找代码块,github也可以显示调用关系,但是要注意版本一致)。

发现getGEO主要调用了parseGEO函数,进入getGEOfile函数,找到了downloadFile函数的调用

进入downloadFile函数,发现开发者将超时时间设置死了为120s,这样在包内部写死timeout的做法是非常不推荐的。

因为是包内部将timeout写死,所以没有什么办法,于是去github issue中寻找是否有人遇到同样的情况,发现有人对这个问题进行了阐述,并给了修复方法。Make timeout configurable in downloadFile() #139 作者也将改修改并入了新代码中。

该代码增加了可以自定义timeout的选项,即可以全局设置timeout,然后在函数中获取。

解决办法

因为作者将代码并入了main分支,只需根据github安装最新的版本即可。方法如下

BiocManager::install('seandavi/GEOquery')
packageVersion("GEOquery")
# 2.73.4

这时只需要全局设置timeout,即可避免问题发生

options(timeout=999999)
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐