2401_87238458 2024-09-26 01:48 采纳率: 0%
浏览 5

孟德尔随机化分析找暴露因素报错

孟德尔随机化找暴露因素的代码总是报错,该怎么办

options(ieugwasr_api = 'gwas-api.mrcieu.ac.uk/')

#加载函数:直接运行即可,不需要改参数。运行完看环境里是否出现functions名为find_exposure
find_exposure <- function(outcome_id=NULL,
                          outcome_file=NULL,
                          outcome_full=NULL,
                          outcome_name,
                          num1=1,
                          num2=18115,
                          pval=5e-8,
                          clump_r2=0.001,
                          clump_kb=10000,
                          proxies=TRUE,
                          pop="European",
                          renew_id=FALSE,
                          action=3,
                          save_path){
  
  if(renew_id){
    
    ao <- TwoSampleMR::available_outcomes()
    
  }else{
    
   
    
  }
  
  mrbase_id <- ao%>%
    dplyr::arrange(.,id)%>%
    subset(.,population==pop)
  
  eqtl_id <- mrbase_id[grep("eqtl-a-*",mrbase_id$id),]
  
  mrbase_id <- mrbase_id[!mrbase_id$id %in% eqtl_id$id,]
  
  if(!is.null(outcome_id)){
    
    mrbase_id <- mrbase_id[!mrbase_id$id %in% outcome_id,]
    
  }
  
  id <- mrbase_id %>%
    dplyr::arrange(.,id)%>%
    dplyr::select(id)%>%
    dplyr::filter(id != c("ieu-a-819"))
  
  for (i in num1:num2) {
    
    exp <- TwoSampleMR::extract_instruments(outcomes = id$id[i],
                                            p1 = pval,
                                            r2 = clump_r2,
                                            kb = clump_kb,
                                            clump = TRUE)
    
    print(paste0(i,": ",id$id[i]))
    
    if(!is.null(exp)){
      
      if(!is.null(outcome_id)){
        
        out <- TwoSampleMR::extract_outcome_data(
          snps=exp$SNP,
          outcomes=outcome_id,
          proxies = proxies)
        
      }else if(!is.null(outcome_file)){
        
        outcome_full <- readRDS(outcome_file)
        
        out <- merge(outcome_full,exp,by="SNP")%>%
          dplyr::select(SNP,grep("outcome",colnames(.)))
        
      }else{
        
        out <- merge(outcome_full,exp,by="SNP")%>%
          dplyr::select(SNP,grep("outcome",colnames(.)))
        
      }
      
      if(!is.null(out)){
        
        dat <- TwoSampleMR::harmonise_data(exposure_dat = exp,
                                           outcome_dat = out,
                                           action = action)
        
        dat <- subset(dat,dat$mr_keep==TRUE)
        
        if(nrow(dat)!=0){
          
          library(TwoSampleMR)
          
          res <-GagnonMR::primary_MR_analysis(dat=dat)
          
          if(nrow(res)!=0){
            
            print(res)
            
            if(res$pval< 0.05){
              
              print(res)
              
              print(i)
              
              utils::write.table(res, file = paste0(save_path,"/",outcome_name,"_MRbase_id.MRres"), quote=FALSE, col.names = TRUE, append = TRUE,row.names = FALSE)
            }
          }
        }
        
      }
    }
  }
}


########################################调用函数:修改参数后运行即可
find_exposure(outcome_id="ebi-a-GCST90018875",
                outcome_file=NULL,
                outcome_full=NULL,
                outcome_name="lung cancer",
                num1=1,
                num2=18115,
                pval=5e-8,
                clump_r2=0.001,
                clump_kb=10000,
                proxies=TRUE,
                pop="European",
                renew_id=FALSE,
                action=3,
                save_path="D:xxxxxx")
错误于if (nrow(d) == 0) return(NULL): 参数长度为零
Called from: TwoSampleMR::extract_instruments(outcomes = id$id[i], p1 = pval, 
    r2 = clump_r2, kb = clump_kb, clump = TRUE)
Browse[1]

  • 写回答

2条回答 默认 最新

  • 一轮明月照丘壑 2024-09-26 01:49
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你提供的代码和错误信息来看,问题出现在 TwoSampleMR::extract_instruments 函数调用的地方。错误提示是 参数长度为零,这可能是由于你尝试提取的仪器(即SNP数据)不存在或者没有匹配的结果。这可能是由于以下几个原因造成的:

    1. outcome_id 参数可能没有正确设置或者对应的SNP数据不存在。你需要确保你提供的 outcome_id 是有效的,并且对应的SNP数据在数据库中是可以找到的。你可以通过 TwoSampleMR::available_outcomes() 函数查看所有可用的outcome id。
    2. 数据库可能没有正确连接到MRBase,或者MRBase数据库中没有你想要的数据。你可以检查你的网络连接,以及你的代码是否正确设置了连接MRBase的参数。
    3. 你的代码在处理结果时假设了每个id都会返回结果,但实际上可能有的id没有返回结果。在调用 TwoSampleMR::extract_instruments 之后,你应该检查返回的 exp 是否为空,如果不为空再执行后续操作。你可以尝试添加一些错误检查代码来处理这种情况。

    下面是一种可能的修改方式:

    exp <- TwoSampleMR::extract_instruments(outcomes = id$id[i], p1 = pval, r2 = clump_r2, kb = clump_kb, clump = TRUE)
    if(!is.null(exp)){ # 添加检查返回的exp是否不为空的代码
        print(paste0(i,": ",id$id[i]))
        # ...后续操作...
    } else {
        print("No data found for this outcome id.")
    }
    

    希望这些建议能帮助你解决问题。如果问题仍然存在,我建议你查看TwoSampleMR的官方文档或者联系其开发者寻求帮助。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月26日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见