r - 正在使用哪个 plot()?
问题描述
在 R 中,您经常会看到plot()
使用非常不同类型的数据和非常不同的默认结果。plot()
识别给定的对象并根据该对象使用适当的功能。
在下面的例子中plot()
实际上是指ape::plot.phylo()
.
library(ape)
tree.owls <-
read.tree(text =
"(((Strix_aluco:4.2,Asio_otus:4.2):3.1, Athene_noctua:7.3):6.3,Tyto_alba:13.5);")
plot(tree.owls)
问题是:你怎么知道在这种情况下plot()
指的是plot.phylo()
?更一般地说,ss 有没有办法找出适用于任何正在绘制的对象(向量、df、列表、S3、S4 等)?
解决方案
plot()
是一个通用函数。该ape
包有一个绘图函数的方法,即plot.phylo
. 将包加载到 R 会话中时,每个通用函数的任何方法都会缓存在您的环境中。
如果您尝试methods(plot)
,您将看到在您的环境中可用的所有各种plot()
方法。这里有两条漂亮的线条,用于查看有关您环境中每种绘图方法的信息。
m <- methods("plot")
print(attr(m, "info"))
那么如何plot()
知道使用plot.phylo
而不是plot.default
其他许多可用的绘图方法之一呢?包作者在具有特定类属性的对象上使用他们的方法。在这种情况下,类属性是“phylo”。str()
我们可以用or看到类属性dplyr::glimpse()
:
> str(tree.owls)
List of 4
$ edge : int [1:6, 1:2] 5 6 7 7 6 5 6 7 1 2 ...
$ edge.length: num [1:6] 6.3 3.1 4.2 4.2 7.3 13.5
$ Nnode : int 3
$ tip.label : chr [1:4] "Strix_aluco" "Asio_otus" "Athene_noctua" "Tyto_alba"
- attr(*, "class")= chr "phylo"
- attr(*, "order")= chr "cladewise"
如果给定的对象没有该方法所需的类属性,它将尝试该函数的其他方法,最后尝试默认方法,在这种情况下是plot.default
推荐阅读
- user-interface - Hashicorp Vault UI - 未能在“完整性”属性中找到有效的摘要......资源已被阻止
- mysql - 在 MYSQL 8.0 中设置变量的警告
- python - 在多个按钮单击时将 Ajax 请求传递给 Django 视图
- android - 如何在 Android 中使用画布在其他图像中添加图像?
- azure-cosmosdb - in 等效于 cosmos db 子查询
- c# - 无法初始化 tesseract 引擎,但我确实拥有所有文件
- sql-server - SQL Server 服务在重新启动后需要多次重试才能启动,但最终会启动
- ssl - HTTPS 图标红色并使用 Apache2 划掉
- json - 在powershell中重新排序对象成员
- android-studio - 如何在 Android Studio 上打开 Activity_main.xml