合并SummarizedExperiment对象报错:列名不一致问题求助
解决SummarizedExperiment合并报错的方案
错误原因
报错提示的是colData(样本元数据)的列名不一致,SummarizedExperiment::cbind按列合并样本时,不仅要求所有对象的assay行(甲基化位点)完全匹配,还要求每个对象的colData列名完全一致,否则无法合并样本元数据。你之前只统一了assay的行,未处理colData的列,导致报错。
修复步骤
1. 统一所有对象的assay行和colData列
先提取assay的共同行(甲基化位点)和colData的共同列,再对每个对象做筛选:
dflist <- list(met.kirp.450, met.kirc.450, met.kich.450) # 获取assay的共同行名(甲基化位点) match.col <- Reduce(function(x, y){intersect(x, rownames(y))}, dflist, init = rownames(dflist[[1]])) # 获取colData的共同列名 common_coldata_cols <- Reduce(intersect, lapply(dflist, function(x) colnames(colData(x)))) # 统一每个对象的assay行和colData列 met.kirp.450 <- met.kirp.450[match.col, ] colData(met.kirp.450) <- colData(met.kirp.450)[, common_coldata_cols] met.kirc.450 <- met.kirc.450[match.col, ] colData(met.kirc.450) <- colData(met.kirc.450)[, common_coldata_cols] met.kich.450 <- met.kich.450[match.col, ] colData(met.kich.450) <- colData(met.kich.450)[, common_coldata_cols]
2. 执行合并
现在可以正常使用cbind合并三个对象:
merged_met <- SummarizedExperiment::cbind(met.kirp.450, met.kirc.450, met.kich.450)
额外提示
你在GDCprepare中保存文件时,三个对象用了同一个文件名gbmDNAmet450k.rda,这会导致后保存的文件覆盖之前的,建议修改为不同文件名避免数据丢失:
# KIRP数据保存 met.kirp.450 <- GDCprepare( query = query.met.kirp, save = TRUE, save.filename = "kirp_DNAmet_450k.rda", summarizedExperiment = TRUE ) # KIRC数据保存 met.kirc.450 <- GDCprepare( query = query.met.kirc, save = TRUE, save.filename = "kirc_DNAmet_450k.rda", summarizedExperiment = TRUE ) # KICH数据保存 met.kich.450 <- GDCprepare( query = query.met.kich, save = TRUE, save.filename = "kich_DNAmet_450k.rda", summarizedExperiment = TRUE )
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

