2

我正在尝试从一个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以及cluster包中定义的对象。agnesdianatwins

我从上面的链接中借用了一个可重现的示例:

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, ...)

但我真的可以看出什么是错的......

4

1 回答 1

2

我设法解决了我的问题。我会发布它以防将来对其他人有帮助。

显然,ggtree当我从 Bioconductor 重新安装时,我运行的旧版本没有正确更新ggtree,我不知道为什么。无论如何,我尝试通过version在安装调用中显式设置参数来重新安装它:

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

然后我可以成功运行我的可重现示例:

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

在此处输入图像描述

请注意,作为以前的解决方法,我设法通过将对象转换为具有包中函数的对象来绘制hcluster对象:ggtreephyloas.phylo()ape

hc <- hclust(dist(mtcars))
hc <- ape::as.phylo(hc)
p <- ggtree(hc, linetype='dashed')
于 2020-03-30T02:17:52.367 回答