weixin_50883715 2024-03-24 16:59 采纳率: 0%
浏览 100
已结题

Rstudio 孟德尔随机化代码报错,前面还是正常的

img

孟德尔随机化代码报错,没有改动代码,之前还是正常的,

# 设置工作目录
setwd("E:\\zhuomian\\lianxide\\3-23shishi - fuben  ceshi")
# 载入 TwoSampleMR 包
library(TwoSampleMR)

# 读取暴露因子的ID数据
exposureIDs <- read.table("extracted_data.txt", header = FALSE)$V1

outcomeID <- "ieu-a-1185"    # 结果数据ID

# 创建一个空的数据框,用于存储所有结果
finalResults <- data.frame()


# 循环处理每个暴露因子
for (exposureID in exposureIDs) {
  # 提取暴露因子数据  p1数值可调整
  exposure_dat <- extract_instruments(exposureID, p1 = 1e-6, clump = TRUE)
  
  # 提取结果数据
  outcome_dat <- extract_outcome_data(snps = exposure_dat$SNP, outcomes = outcomeID)
  
  # 将暴露因子数据和结果数据进行协调
  dat <- harmonise_data(exposure_dat, outcome_dat)
  
  # 提取需要保留的数据用于后续分析
  outTab <- dat[dat$mr_keep == "TRUE", ]
  write.csv(outTab, file = paste0("table.SNP_", exposureID, ".csv"), row.names = FALSE)
  
  # 进行 MR 分析
  mrResult <- mr(dat)
  
  # 选择特定的 MR 方法进行分析
  # 可以根据需要进行选择,以下为几种可选方法
  # mr_method_list()$obj
  mrResult <- mr(dat, method_list = c("mr_ivw", "mr_egger_regression", "mr_weighted_median", "mr_simple_mode", "mr_weighted_mode"))
  
  # 生成 Odds Ratios(OR)的表格
  mrTab <- generate_odds_ratios(mrResult)
  write.csv(mrTab, file = paste0("table.MRresult_", exposureID, ".csv"), row.names = FALSE)
  
  # 进行异质性检验
  heterTab <- mr_heterogeneity(dat)
  write.csv(heterTab, file = paste0("table.heterogeneity_", exposureID, ".csv"), row.names = FALSE)
  
  # 进行多重性检验
  pleioTab <- mr_pleiotropy_test(dat)
  write.csv(pleioTab, file = paste0("table.pleiotropy_", exposureID, ".csv"), row.names = FALSE)

  # 将每次循环中生成的结果追加到总的结果数据框
  finalResults <- rbind(finalResults, cbind(exposureID = exposureID, mrTab))
}

# 将最终的结果写入一个总的CSV文件
write.csv(finalResults, file = "finalResults.csv", row.names = FALSE)
#


  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-24 16:59
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    从您提供的错误信息来看,错误发生在mr()函数执行时,提示“Error in if (nrow(d)==0) return(NULL): 参数长度为零”。这表明在执行MR分析时,传给mr()函数的数据框dat可能为空,即它不包含任何可用于分析的有效观测值。

    为了定位问题并解决这个问题,您可以尝试在调用mr()函数前检查dat数据框是否为空:

    # 在mr()函数之前添加一行检查代码
    if(nrow(dat) == 0){
      message(paste0("Warning: No valid observations found for exposure ID: ", exposureID))
    } else {
      # 继续执行MR分析
      mrResult <- mr(dat, method_list = c("mr_iw","mr_egger_regression","mr_weighted_median","mr_simp"))
    }
    

    这样,当数据框为空时,程序会输出一条警告信息而不是试图运行MR分析导致错误。

    同时,请注意您的代码片段中似乎有一些拼写错误或遗漏,例如在写入CSV文件名的部分,应当修正这些错误以确保正确保存各个表单:

    # 生成 Odds Ratios(OR)的表格
    mrTab <- generate_odds_ratios(mrResult)
    write.csv(mrTab, file = paste0("table.MRresult_", exposureID, ".csv"), row.names = FALSE)
    
    # 进行异质性检验
    heterTab <- mr_heterogeneity(dat)
    write.csv(heterTab, file = paste0("table.heterogeneity_", exposureID, ".csv"), row.names = FALSE)
    
    # 进行多重性检验
    pleioTab <- mr_pleiotropy_test(dat)
    write.csv(pleioTab, file = paste0("table.pleiotropy_", exposureID, ".csv"), row.names = FALSE)
    

    此外,请确保在循环外初始化finalResults数据框,并且在循环内追加数据时正确绑定列名:

    # 初始化最终结果数据框,其中应包含暴露因子ID列
    finalResults <- data.frame(exposureID = character())
    
    # 循环内的追加操作
    finalResults <- rbind(finalResults, cbind(exposureID = exposureID, mrTab))
    

    最后,请确保extract_instruments()extract_outcome_data()harmonise_data()函数能正确提取和合并数据,确保输入给mr()函数的数据是有效的。如果数据源有更新或变化,可能会导致数据处理过程中产生空数据框的问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 创建了问题 3月24日

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大