【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()
}
然后调用绘图即可。
