Получение ошибки «объект должен быть именованным списком» при построении карты температур в R - PullRequest
2 голосов
/ 05 марта 2020

Я воссоздал ошибку в этом небольшом примере:

my_matrix <- matrix(1:9, nrow = 3, ncol = 3)
a = c("cat","dog","mouse")
my_groups <- as.data.frame(a)

p <- ComplexHeatmap::Heatmap(
        matrix = my_matrix,
        col = RColorBrewer::brewer.pal(9, "RdBu"),
    )

col = RColorBrewer::brewer.pal(9, "RdBu")

 p <- p + ComplexHeatmap::rowAnnotation(
            df = my_groups,
            col = col,
            show_annotation_name = TRUE)
Error: `col` should be a named list.

Почему я получаю эту ошибку и что я могу изменить в своем коде, чтобы предотвратить ее?

1 Ответ

1 голос
/ 05 марта 2020

Аргумент col должен быть именованным списком, а элементы в col должны быть именованными векторами. например,

col1 <- list(a = c(cat = "red", dog = "blue", mouse = "green"))
col1

# $a
#     cat     dog   mouse 
#   "red"  "blue" "green"

Вы можете создать цвета для соответствующих строк my_groups.

p + ComplexHeatmap::rowAnnotation(
  df = my_groups,
  col = col1,
  show_annotation_name = TRUE)

image

Конечно, хотя я вручную устанавливаю цвета один одним из них в моем примере вы можете создавать причудливые цветовые векторы с помощью RColorBrewer или других пакетов. Не забудьте сделать вектор и список именованными.


Чтобы сделать пример более сложным:

a <- c("cat","dog","mouse")
b <- c(rep("group1", 2), "group2")
my_groups <- data.frame(a, b)

col1 <- setNames(RColorBrewer::brewer.pal(3, "Set1"), a)
col2 <- setNames(RColorBrewer::brewer.pal(3, "Dark2"), b)
col.list <- list(a = col1, b = col2)

# $a
#       cat       dog     mouse 
# "#E41A1C" "#377EB8" "#4DAF4A" 
# 
# $b
#    group1    group1    group2 
# "#1B9E77" "#D95F02" "#7570B3" 

p + ComplexHeatmap::rowAnnotation(
  df = my_groups,
  col = col.list,
  show_annotation_name = TRUE)

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...