俺要要要终于回来啦!!!今天!咱就帮助大家解决一个困扰多日的问题!是什么呢!铛铛铛铛!就是近期大家在孟德尔随机化分析中最常遇到的
Error in if (out == "[]") { : argument is of length zero
或Error in if (nrow(d) == 0) return(NULL) : 参数长度为零
!相信大家一定遇到过!因为我发现,私信和留言,还有交流群内,都快被这个问题刷屏了,而且似乎也没有什么好的解决方案出现!这是咱们使用之前在看完不会来揍我 | 孟德尔随机化万字长文详解(二)—— 代码实操 | 附代码注释 + 结果解读中的方法在线从 GWAS 数据库下载数据时会遇到的情况,真是让我们一筹莫展、二脸懵逼、三阳开泰、四处碰壁、「五」可奈何、六六不顺、七上八下、「八」酒消愁、「九」命呀!咱不慌!今天!一个偶然的情况下,我突然灵光乍现!就那么一试!哎呀!果然!居然搞定了!谢天谢地!可歌可泣啊!来!咱们一起看看!
如果小伙伴们有需求的话,可以加入我们的交流群:一定要知道 | 永久免费的环境友好型生信学习交流群又双叒叕来啦!| 伴随不定期群友好物分享!在这里,你可以稍有克制地畅所欲言! 超级建议大家在入群前或入群后可以看一下这个:干货满满 | 给生信小白的入门小建议 | 掏心掏肺版!绝对干货满满!让你不虚此看! 如果有需要个性化定制分析服务的小伙伴,可以看看这里:你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!!绝对包你满意!
首先检查token是否设置成功
有时候在线从 GWAS 数据库下载数据失败,我们都会以为是服务器或网络等的问题,有时候确实是哈,后来查询(https://github.com/MRCIEU/TwoSampleMR/issues/448)才发现,从 2024 年 5 之后都需要设置 token 才可以继续访问服务器。那如果咱们还没有设置过 token 的话,记得要先设置哟!详见:https://mrcieu.github.io/ieugwasr/articles/guide.html
咱们这里简单介绍一下:
要进行身份验证,您需要从 OpenGWAS 网站生成一个令牌。这个令牌就像密码一样,用于授权您对 OpenGWAS API 的请求。以下是生成令牌并让其自动用于查询的步骤:
登录 https://api.opengwas.io/profile/ 生成一个新令牌 将 <token>
添加到您的.Renviron
文件中。此文件可以在您的主目录中,也可以在您的 R 会话的工作目录中。您可以通过在 R 中运行Sys.getenv("R_ENVIRON_USER")
来检查.Renviron
文件的位置。重启您的 R 会话 要检查您的令牌是否被识别,请运行 ieugwasr::get_opengwas_jwt()
。如果返回一个长的随机字符串,则表示您已通过身份验证。要检查您的令牌是否正常工作,请运行 user()
。它将使用您的令牌向 API 发出请求以获取您的用户信息。它应该返回一个包含您的用户信息的列表。如果返回错误,则表示您的令牌无法正常工作。
现在,任何对 OpenGWAS 的查询都会自动包含您的令牌以授权请求。
咱们设置完之后,就像这样:
红框框就是 OpenGWAS 网站生成的 token 啦!绿框框是 GitHub 的 token 哈哈哈哈哈哈!
彻底解决那个讨厌的报错
来!现在!咱们来现场从 GWAS 数据库在线下载一个暴露数据试试看!
# 加载包包
library(TwoSampleMR)
# 从 GWAS 数据库下载数据
exposure_data <- extract_instruments(
outcomes = "ukb-b-16639", # 指定 GWAS 数据集
p1 = 5e-08, # 过滤 SNP 的 p 值阈值
clump = TRUE, # 进行 SNP clumping
r2 = 0.001, # clumping 的 r^2 阈值
kb = 10000 # clumping 的窗口大小
)
看!果不其然!报错了吧!报错如下!是不是看到它就头秃!放心!今天过后,它就是咱们的手下败将!!!
Error in if (out == "[]") { : argument is of length zero
呐!咱把 P 值阈值设宽松一点试试呢?比如像下面这样,把p1 = 5e-08
改成p1 = 5e-06
。
exposure_data <- extract_instruments(
outcomes = "ukb-b-16639", # 指定 GWAS 数据集
p1 = 5e-06, # 过滤 SNP 的 p 值阈值
clump = TRUE, # 进行 SNP clumping
r2 = 0.001, # clumping 的 r^2 阈值
kb = 10000 # clumping 的窗口大小
)
exposure_data
# pval.exposure pos.exposure beta.exposure se.exposure samplesize.exposure chr.exposure id.exposure SNP effect_allele.exposure
# 1 4.70002e-06 80464745 -0.00336713 0.000735449 64949 12 ukb-b-16639 rs7315575 A
# other_allele.exposure eaf.exposure exposure mr_keep.exposure pval_origin.exposure data_source.exposure
# 1 C 0.65584 || id:ukb-b-16639 TRUE reported igd
哎呀呀!成功了呢!哎嘿嘿!
看看看看!咱都把 P 值阈值设为 5e-06了,才筛到一个符合的 SNP,可想而知!5e-08 的 P 值阈值,那可不什么都得不到嘛!自然它就报错啦!应该是它的源代码内部的编写问题,有兴趣的小伙伴也可以自己去修改一下源代码哈哈哈哈哈,让它即使没筛到 SNP 也可以继续运行下去!不过咱们现在已经知道这个报错的原因啦!是否需要它不报错是不是也就不重要啦哈哈哈哈哈!
那以后咱们如果遇到Error in if (out == "[]") { : argument is of length zero
或Error in if (nrow(d) == 0) return(NULL) : 参数长度为零
这类报错,是不是就知道该怎么办啦!哎对!没错!把过滤 SNP 的 P 值阈值默认参数p1 = 5e-08
改成p1 = 5e-06
试试!如果还不行,建议换数据集哈哈哈哈哈哈!因为这算是公认的底线!好多文章最宽松的 P 值阈值也就是 5e-06 而已!不建议更宽松啦!
文末碎碎念
那今天的分享就到这里啦!我们下期再见哟!
最后顺便给自己推荐一下嘿嘿嘿!
如果我的分享对你有用的话,欢迎关注点赞在看转发分享阿巴阿巴阿巴阿巴巴巴!这可是我的第一原动力!
蟹蟹你们的喜欢和支持!!!