如何解决circlize包可视化基因融合时的类型比较报错?
解决circlize包绘制基因融合环形图的报错问题
问题场景
使用circlize包可视化多组基因融合关系的环形图时,运行代码出现如下报错:
Error in region1[i, 2] == region1[i, 3] : comparison of these types is not implemented
原始数据定义
fusion1 <- data.frame("chr" = c("chr7", "chr1", "chr12", "chr3", "chr16", "chr7", "chr12", "chr1"), "start" = c(27934839, 92327028, 24366277, 64430159, 85391249, 27934839, 67462830, 741179), "end" = c(28934839, 93327028, 25366277, 65430159, 86391249, 28934839, 68462830, 1741179)) fusion2 <- data.frame("chr" = c("chr17", "chr1", "chr12", "chr3", "chr16", "chr17", "chr12", "chr7"), "start" = c(30267305, 92456741, 24048958, 64184643, 85667520, 30274636, 66990707, 55863785), "end" = c(31267305,93456741, 25048958, 65184643, 86667520, 31274636, 67990707, 56863785))
原始执行代码
library(circlize) circos.initializeWithIdeogram() circos.genomicLink(fusion1, fusion2, col = "red", border = NA) circos.clear()
报错原因及解决方法
报错根源是circos.genomicLink对输入数据的类型和格式有严格要求:要么输入GRanges对象,要么数据框的列名、数据类型完全符合要求,否则会出现类型比较错误。
方案1:转换为GRanges对象(推荐)
GRanges是基因组数据的标准格式,circlize对其兼容性最好,能彻底避免类型匹配问题:
library(circlize) library(GenomicRanges) # 将数据框转换为GRanges对象 gr1 <- makeGRangesFromDataFrame(fusion1, keep.extra.columns = FALSE) gr2 <- makeGRangesFromDataFrame(fusion2, keep.extra.columns = FALSE) # 重新绘制环形图 circos.initializeWithIdeogram() circos.genomicLink(gr1, gr2, col = "red", border = NA) circos.clear()
方案2:修正数据框格式
如果不想依赖GenomicRanges包,可以直接调整数据框的格式:
- 确保列名为
chr、start、end(避免引号干扰) - 确认
start和end列为数值类型
library(circlize) # 修正列名(去除不必要的引号) colnames(fusion1) <- c("chr", "start", "end") colnames(fusion2) <- c("chr", "start", "end") # 强制转换start/end列为数值型 fusion1[, c("start", "end")] <- lapply(fusion1[, c("start", "end")], as.numeric) fusion2[, c("start", "end")] <- lapply(fusion2[, c("start", "end")], as.numeric) # 重新绘图 circos.initializeWithIdeogram() circos.genomicLink(fusion1, fusion2, col = "red", border = NA) circos.clear()
内容的提问来源于stack exchange,提问作者Ji Seon Jeong
相关产品推荐
相关产品推荐

