gpt4 book ai didi

r - 使用了哪个 plot()?

转载 作者:行者123 更新时间:2023-12-04 09:24:46 25 4
gpt4 key购买 nike

在 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()?更一般地说,有没有办法找出适用于任何正在绘制的对象(向量、df、列表、S3、S4 等)?

最佳答案

正如其他人所提到的,这与 S3 方法调度有关。您可以使用 class 函数检查对象的类。在这种情况下,它返回 phylo

很多泛型函数都有很多方法。您可以使用 methods("plot") 检查所有方法。

plot 函数的源代码是

function (x, y, ...) 
UseMethod("plot")

UseMethod 函数将在给定的通用函数上搜索可用的方法。如果它能找到该方法,在本例中为 plot.phylo,那么它将执行该方法,否则它将使用下一个方法或默认方法。

所以重申一下,plot 使用什么方法完全取决于对象的类,如果对象是数据帧、向量、列表等,则不那么重要。类可以方便地保证函数以预期的方式运行。

要真正说明问题,您也可以定义自己的绘图方法。以此为例:

plot.foo <- function(x){
str(x)
plot(iris)
}

obj1 <- 1:3
class(obj1) <- "foo"
obj2 <- list(x = 2, y = 1:100)
class(obj2) <- "foo"

#No matter the object we pass, so long as the class if "foo",
# our custom plot method is called

plot(obj1)
#Class 'foo' int [1:3] 1 2 3
plot(obj2)
#List of 2
#$ x: num 2
#$ y: int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
# - attr(*, "class")= chr "foo"

关于r - 使用了哪个 plot()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com