生物信息学与算法Bioconductor for R数据科学与R语言

【r<-bioc|生信】RTCGAToolbox包getR

2018-04-24  本文已影响40人  王诗翔

RTCGAToolbox提供了一个Report Figure功能,但一运行就报错,仔细检查发现存在两方面的问题。

RCircos.Core.Components initialized.
Type ?RCircos.Reset.Plot.Parameters to see how to modify the core components.


Error in RCircos.Reset.Plot.Parameters(params) : 
  Please use RCircos.Set.Core.Components() instead.

如果你仔细检查源码,你会发现错误来源于

     params$radius.len <- 3
     params$track.background <- "white"
     params$track.height <- 0.4
     params$point.size <- 2
     params$text.size <- 3
     params$track.out.start <- 0.05

原因是该包作者调用了RCircos包,但这个包修改了RCircos.Reset.Plot.Parameters(params)函数的输入判定,对能够修改的参数做了一些限定:

> RCircos.Reset.Plot.Parameters
function (new.params = NULL) 
{
    if (is.null(new.params)) 
        stop("Missing function argument.\n")
    old.params <- RCircos.Get.Plot.Parameters()
    if (new.params$radius.len != old.params$radius.len || new.params$plot.radius != 
        old.params$plot.radius || new.params$chr.ideo.pos != 
        old.params$chr.ideo.pos || new.params$tracks.inside != 
        old.params$tracks.inside || new.params$tracks.outside != 
        old.params$tracks.outside) {
        stop("Please use RCircos.Set.Core.Components() instead.\n")
    }

代码中指定了new.params$radius.len != old.params$radius.len,而getReport函数对它进行了更改,所以不能更新参数,反而报错。

另外getReport函数中存在的问题是它本身Firehose数据对象的一个slot名从Mutations变成了Mutation,但在该函数中没有进行相应的更改。当你想要使用突变数据画图,又修正了第一个错误后,这个错误将被抛出。

如果你还想要使用该功能,只能自定义一个函数,对相关的错误修正:

getReport2 <- function (dataObject, DGEResult1 = NULL, DGEResult2 = NULL, geneLocations) 
{
    if (is.null(dataObject) | class(dataObject) != "FirehoseData") {
        stop("Please set a valid FirehoseData class!")
    }
    if (!is.null(DGEResult1) & class(DGEResult1) != "DGEResult") {
        stop("DGEResult1 must be DGEResult class!")
    }
    if (!is.null(DGEResult2) & class(DGEResult2) != "DGEResult") {
        stop("DGEResult2 must be DGEResult class!")
    }
    pdf(file = paste(dataObject@Dataset, "-reportImage.pdf", 
                     sep = ""), height = 30, width = 30)
    plotpos <- 1
    localData <- new.env(parent = emptyenv())
    data(UCSC.HG19.Human.CytoBandIdeogram, package = "RCircos", 
         envir = localData)
    UCSC.HG19.Human.CytoBandIdeogram <- localData[["UCSC.HG19.Human.CytoBandIdeogram"]]
    RCircos.Set.Core.Components(cyto.info = UCSC.HG19.Human.CytoBandIdeogram, 
                                chr.exclude = NULL, tracks.inside = 3, tracks.outside = 3)
    params <- RCircos.Get.Plot.Parameters()
    # params$radius.len <- 3
    # params$track.background <- "white"
    # params$track.height <- 0.4
    # params$point.size <- 2
    # params$text.size <- 3
    # params$track.out.start <- 0.05
    RCircos.Reset.Plot.Parameters(params)
    RCircos.Set.Plot.Area()
    RCircos.Chromosome.Ideogram.Plot()
    if (!is.null(DGEResult1)) {
        rnaseqGenes <- rownames(DGEResult1@Toptable)
        rnaseqGenes2 <- character()
        for (rg in rnaseqGenes) {
            rnaseqGenes2 <- append(rnaseqGenes2, as.character(strsplit(rg, 
                                                                       "\\|")[[1]][1]))
        }
        rnaFrame <- data.frame(rnaseqGenes, rnaseqGenes2)
        rnaFrame <- rnaFrame[!duplicated(rnaFrame[, 2]), ]
        rownames(rnaFrame) <- rnaFrame[, 2]
        intGenes <- intersect(rnaFrame[, 2], rownames(geneLocations))
        rnaFrame <- rnaFrame[intGenes, ]
        if (length(intGenes > 0)) {
            logFC <- as.numeric(DGEResult1@Toptable[as.character(rnaFrame[, 
                                                                          1]), 1])
            histData <- cbind(geneLocations[intGenes, c(2, 4, 
                                                        5)], logFC)
            RCircos.Scatter.Plot(histData, data.col = 4, track.num = plotpos, 
                                 side = "in", by.fold = 1e-04)
            message(paste("Track No:", plotpos, " (in) differential gene expression data 1"))
            plotpos = plotpos + 1
        }
    }
    if (!is.null(DGEResult2)) {
        rnaseqGenes <- rownames(DGEResult1@Toptable)
        rnaseqGenes2 <- character()
        for (rg in rnaseqGenes) {
            rnaseqGenes2 <- append(rnaseqGenes2, as.character(strsplit(rg, 
                                                                       "\\|")[[1]][1]))
        }
        rnaFrame <- data.frame(rnaseqGenes, rnaseqGenes2)
        rnaFrame <- rnaFrame[!duplicated(rnaFrame[, 2]), ]
        rownames(rnaFrame) <- rnaFrame[, 2]
        intGenes <- intersect(rnaFrame[, 2], rownames(geneLocations))
        rnaFrame <- rnaFrame[intGenes, ]
        if (length(intGenes > 0)) {
            logFC <- as.numeric(DGEResult1@Toptable[as.character(rnaFrame[, 
                                                                          1]), 1])
            histData <- cbind(geneLocations[intGenes, c(2, 4, 
                                                        5)], logFC)
            RCircos.Scatter.Plot(histData, data.col = 4, track.num = plotpos, 
                                 side = "in", by.fold = 1e-04)
            message(paste("Track No:", plotpos, " (in) differential gene expression data 2"))
            plotpos = plotpos + 1
        }
    }
    if (!is.null(dataObject@GISTIC) & class(dataObject@GISTIC) == 
        "FirehoseGISTIC" & length(dataObject@GISTIC@Dataset) > 
        0) {
        cnMat <- dataObject@GISTIC@ThresholdedByGene
        rownames(cnMat) <- cnMat[, 1]
        cnMat <- cnMat[, 4:ncol(cnMat)]
        intGenes <- intersect(rownames(cnMat), rownames(geneLocations))
        if (length(intGenes > 0)) {
            cnMat <- cnMat[intGenes, ]
            cnMat <- apply(cnMat, 2, as.numeric)
            rownames(cnMat) <- intGenes
            cnMat2 <- rowMeans(cnMat)
            cnMat <- cnMat[cnMat2 > 0.3 | cnMat2 < -0.3, ]
            histData <- cbind(geneLocations[rownames(cnMat), 
                                            c(2, 4, 5, 1)], cnMat2[cnMat2 > 0.3 | cnMat2 < 
                                                                       -0.3])
            RCircos.Heatmap.Plot(histData, data.col = 5, track.num = plotpos, 
                                 side = "in")
            message(paste("Track No:", plotpos, " (in) copy number data"))
            plotpos = plotpos + 1
        }
    }
    if (!is.null(dataObject@Mutation) & dim(dataObject@Mutation)[1] > 
        0 & dim(dataObject@Mutation)[2] > 0) {
        mutAll <- dataObject@Mutation
        uniqueGenes <- unique(mutAll[, 1])
        uniqueSamples <- unique(mutAll[, 16])
        countsMut <- matrix(0, length(uniqueGenes), length(uniqueSamples))
        rownames(countsMut) <- uniqueGenes
        colnames(countsMut) <- uniqueSamples
        for (i in uniqueSamples) {
            tmpMut <- as.character(mutAll[mutAll[, 16] == i, 
                                          1])
            countsMut[tmpMut, i] = 1
        }
        mutRatio <- rowMeans(countsMut)
        mutGenes <- rownames(countsMut)[mutRatio > 0.05]
        intGenes <- intersect(mutGenes, rownames(geneLocations))
        if (length(intGenes > 0)) {
            histData <- geneLocations[intGenes, c(2, 4, 5, 1)]
            RCircos.Gene.Connector.Plot(histData, track.num = 1, 
                                        side = "out")
            RCircos.Gene.Name.Plot(histData, track.num = 2, name.col = 4, 
                                   side = "out")
            message(paste("Outside track Mutation!"))
        }
    }
    dev.off()
}

然后调用绘图即可。

Report Figure
上一篇 下一篇

猜你喜欢

热点阅读