Невозможно построить объект hclust с помощью ggtree - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь построить дендрограмму из hclust объекта с ggtree, но продолжаю получать одно и то же сообщение об ошибке:

Error: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class hclust

Я интенсивно искал решение, но не нашел ни одного , Кроме того, я узнал, что ggtree поддерживает hclust объектов, что еще больше смутило меня. С здесь :

Пакет ggtree поддерживает большинство объектов иерархической кластеризации, определенных в сообществе R, включая hclust и dendrogram, а также agnes, diana и twins, которые определены в кластерном пакете.

Я позаимствовал воспроизводимый пример из приведенной выше ссылки:

hc <- hclust(dist(mtcars))
p <- ggtree(hc, linetype='dashed')

Что, опять же, дает мне вышеупомянутое ошибка. Если я использую rlang::last_error(), чтобы получить немного контекста, я получаю:

<error/rlang_error>
`data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class hclust
Backtrace:
 1. ggtree::ggtree(hc, linetype = "dashed")
 3. ggplot2:::ggplot.default(...)
 5. ggplot2:::fortify.default(data, ...)

И если я использую rlang :: last_trace (), чтобы получить немного дополнительной информации:

<error/rlang_error>
`data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class hclust
Backtrace:
    x
 1. \-ggtree::ggtree(hc, linetype = "dashed")
 2.   +-ggplot2::ggplot(...)
 3.   \-ggplot2:::ggplot.default(...)
 4.     +-ggplot2::fortify(data, ...)
 5.     \-ggplot2:::fortify.default(data, ...)

Но я действительно вижу, что не так ...

1 Ответ

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

Мне удалось решить мою проблему. Я опубликую это в случае, если это поможет кому-то еще в будущем.

Судя по всему, я запускал старую версию ggtree, которая не обновлялась корректно при переустановке ggtree из Bioconductor, я не уверен, почему. В любом случае, я попытался переустановить его, явно указав аргумент version в вызове установки:

BiocManager::install("ggtree", version = "3.10")

И затем я мог успешно запустить свой воспроизводимый пример:

hc <- hclust(dist(mtcars))
p <- ggtree(hc, linetype='dashed')

enter image description here

Обратите внимание, что в качестве предыдущего обходного пути мне удалось построить объект hcluster с помощью ggtree, преобразовав его в объект phylo с помощью функции as.phylo() из ape пакет:

hc <- hclust(dist(mtcars))
hc <- ape::as.phylo(hc)
p <- ggtree(hc, linetype='dashed')
...