首页 > 解决方案 > 正在使用哪个 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 等)?

标签: rplot

解决方案


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


推荐阅读