#r
#r
Вопрос:
Когда я использую функцию тепловой карты для создания тепловой карты набора данных, я получаю сообщение об ошибке, я попытался:
df1$family <- substr(as.character(df1$gene_id), 1, nchar(as.character(df1$gene_id))-2)
df01<-df1$family
df01m<-as.matrix(df01)
heatmap(df01m)
Я получаю эту ошибку:
Error in heatmap(df01m): 'x' must be a numeric matrix
Traceback:
1. heatmap(df01m)
2. stop("'x' must be a numeric matrix")
Набор данных большой, поэтому я сократил его часть:
structure(list(gene_id = structure(6:11, .Label = c("__alignment_not_unique",
"__ambiguous", "__no_feature", "__not_aligned", "__too_low_aQual",
"ENSG00000000005", "ENSG00000000419", "ENSG00000000457", "ENSG00000000460",
"ENSG00000000938", "ENSG00000000971", "ENSG00000001036", "ENSG00000001084",
"ENSG00000001167", "ENSG00000001460", "ENSG00000001461", "ENSG00000001497",
"ENSG00000001561", "ENSG00000001617", "ENSG00000001626", "ENSG00000001629",
"ENSG00000001630", "ENSG00000001631", "ENSG00000002016", "ENSG00000002079",
"ENSG00000002330", "ENSG00000002549", "ENSG00000002586", "ENSG00000002587",
"ENSG00000002726", "ENSG00000002745", "ENSG00000002746", "ENSG00000002822",
"ENSG00000002834", "ENSG00000002919", "ENSG00000002933", "ENSG00000003056",
"ENSG00000003096", "ENSG00000003137", "ENSG00000003147", "ENSG00000003249",
"ENSG00000003393", "ENSG00000003400", "ENSG00000003402", "ENSG00000003436",
"ENSG00000003509", "ENSG00000003756", "ENSG00000003987", "ENSG00000003989",
"ENSG00000004059", "ENSG00000004139", "ENSG00000004142", "ENSG00000004399",
"ENSG00000285989", "ENSG00000285990", "ENSG00000285991", "ENSG00000285992",
"ENSG00000285993", "ENSG00000285994"), class = "factor"), expr = c(6L,
754L, 447L, 426L, 5L, 1L)), row.names = c(NA, 6L), class = "data.frame")
заголовок набора данных:
gene_id expr
<fct> <int>
1 ENSG00000000005 6
2 ENSG00000000419 754
3 ENSG00000000457 447
4 ENSG00000000460 426
5 ENSG00000000938 5
6 ENSG00000000971 1
Ответ №1:
Ошибка показывает, что нам нужно числовое matrix
значение. substr
Функция возвращает character
строку. Итак, мы можем преобразовать substr
ing vector
в numeric
df01m <- as.matrix(as.numeric(df01))
Другая проблема заключается в том, что heatmap
требуется matrix
, по крайней мере, 2 строки / 2 столбца. Здесь as.matrix
преобразуется vector
в один столбец matrix
, и это может не сработать
Комментарии:
1. @user432797 это происходит, когда есть нечисловые элементы, т.е.
as.numeric(c('1', '3', 'hello'))
2. @user432797 для тепловой карты требуется числовая матрица. Если
gene_id
это первый столбец, преобразуйте data.frame вmatrix
withgene_id
в качестве имен строк3. @user432797 я проверил ваши новые обновленные данные. Возвращается
substr
substr(as.character(df1$gene_id), 1, nchar(as.character(df1$gene_id))-2) [1] "ENSG000000000" "ENSG000000004" "ENSG000000004" "ENSG000000004" "ENSG000000009" "ENSG000000009"
4. @user432797 вы могли бы использовать
geom_tile
fromggplot
, но для этого требуется еще один столбец, т.е.ggplot(data = df1, aes(x = gene_id, expr )) geom_tile()
5. @user432797 вы можете использовать в
fill
качестве второго столбца