Как часть использования ComplexHeatmaps, мне нужно создать строку, которая позволит мне построить три карты вместе.
Если у меня есть тепловые карты A
, B
и C
, мне понадобитсячтобы сделать это,
AllMaps <- A + B + C
draw(AllMaps)
После этого будут нарисованы все тепловые карты, A
, B
и C
на одном холсте.
Однако, когда я пытаюсь сделать это смой список тепловых карт (где A
, B
и C
хранятся в HeatmapList
) ...
AllMaps <- paste0("HeatmapList[['", names(HeatmapList[1]),
"']] + HeatmapList[['", names(HeatmapList[2]),
"']] + HeatmapList[['", names(HeatmapList[3]),
"']]"
)
draw(AllMaps)
Сбой, и я получаю следующее сообщение:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘draw’ for signature ‘"character"
Странно, если я тогда просто запускаю AllMaps
Я получаю:
"HeatmapList[['A']] + HeatmapList[['B']] + HeatmapList[['C']]"
Отображение paste0
правильно распечатывает мой список имен объектов.Затем, если я скопирую и вставлю этот вывод прямо в draw
, это сработает!например,
#This works
draw(HeatmapList[['A']] + HeatmapList[['B']] + HeatmapList[['C']])
Так что же paste0
делает с draw
, чего он не делает, когда я просто запускаю его сам?
Вот пример, если вы хотите запустить его иубедитесь сами:
#Get the most recent ComplexHeatmaps Package
library(devtools)
install_github("jokergoo/ComplexHeatmap", force = TRUE)
library(ComplexHeatmap)
#Make Example Matrices
Matrices = list()
Matrices[['Mtx1']] <- matrix( c(2, 4, 5, 7), nrow=2, ncol=2, dimnames = list(c("Row1", "Row2"), c("C.1", "C.2")))
Matrices[['Mtx2']] <- matrix( c(5, 1, 3, 9), nrow=2, ncol=2, dimnames = list(c("Row1", "Row2"), c("C.1", "C.2")))
Matrices[['Mtx3']] <- matrix( c(8, 3, 7, 5), nrow=2, ncol=2, dimnames = list(c("Row1", "Row2"), c("C.1", "C.2")))
#Create Heatmaps
HeatmapList = c()
HeatmapList <- lapply(Matrices, function(q) {
Heatmap(q, name = "a_name")
})
names(HeatmapList) <- c('A', 'B', 'C')
#Draw a heatmap to check it's all working
draw(HeatmapList[[2]])
#Create Heatmap string so A, B and C can all be plotted together
AllMaps <- (paste0("HeatmapList[['", names(HeatmapList[1]), "']] + ",
"HeatmapList[['", names(HeatmapList[2]), "']] + ",
"HeatmapList[['", names(HeatmapList[3]), "']]" ))
#Draw using the string we just made --> DOESN"T WORK!
draw(AllMaps)
#Check the string --> LOOKS FINE, JUST AS IT SHOULD BE
paste0(AllMaps)
# Copy and paste string manually into draw command --> THIS WORKS
draw(HeatmapList[['A']] + HeatmapList[['B']] + HeatmapList[['C']])
#SO WHY DOES THIS FAIL???
draw(AllMaps)