使用R基函数plot,我们只需提供数据就可以绘制不同的图,而无需指定进一步的参数。例如,如果我们绘制一个时间序列,使用plot(my_ts)调用plot.ts(my_ts),因为my_ts是类ts。
同样,我们可以使用图方差分析结果,而不需要任何参数。以下是一些方差分析模型:
data <- data.frame(group = c(rep("group_1",25),rep("group_2",25)), scores = c(runif(25,0,1),runif(25,1.5,2.5)))
mod1 <- aov(scores~group,data=data)使用plot(mod1)可以工作,但plot(summary(mod1))会导致错误
“xy.coords中的错误(x,y,xlabel,ylabel,log):'x‘是一个列表,但没有组件'x’和'y'”。
plot函数似乎在寻找名为x和y的数据,同时试图在没有任何参数的情况下自动创建一个绘图。我试过names(mod1),但没有找到任何x或y。那么,plot(mod1)如何工作,而plot(summary(mod1))却不起作用呢?
发布于 2021-12-13 13:05:28
在键入class(x)时,会根据plot(x)调用多个方法。这就是所谓的方法分派。还可以为摘要对象创建新的方法,例如plot.summary.aov:
data <- data.frame(group = c(rep("group_1",25),rep("group_2",25)), scores = c(runif(25,0,1),runif(25,1.5,2.5)))
mod1 <- aov(scores~group,data=data)
plot(mod1)


让我们定义一个新的存根图函数
plot.summary.aov <- function(x) {
plot(iris)
}
plot(summary(mod1))

methods(plot)
#> [1] plot.acf* plot.data.frame* plot.decomposed.ts*
#> [4] plot.default plot.dendrogram* plot.density*
#> [7] plot.ecdf plot.factor* plot.formula*
#> [10] plot.function plot.hclust* plot.histogram*
#> [13] plot.HoltWinters* plot.isoreg* plot.lm*
#> [16] plot.medpolish* plot.mlm* plot.ppr*
#> [19] plot.prcomp* plot.princomp* plot.profile.nls*
#> [22] plot.R6* plot.raster* plot.spec*
#> [25] plot.stepfun plot.stl* plot.summary.aov
#> [28] plot.table* plot.ts plot.tskernel*
#> [31] plot.TukeyHSD*
#> see '?methods' for accessing help and source codehttps://stackoverflow.com/questions/70335038
复制相似问题