【发布时间】:2022-01-16 22:45:02
【问题描述】:
使用 R 基函数 plot,我们只需提供数据即可制作不同的绘图,而无需指定进一步的参数。例如,如果我们绘制一个时间序列,使用plot(my_ts) 调用plot.ts(my_ts) 因为my_ts 是类ts。
同样,我们可以使用不带任何参数的 plot ANOVA 结果。这里有一些 ANOVA 模型:
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)) 不工作是怎么来的呢?
【问题讨论】:
-
因为
summary(mod1)返回一个c类的对象(summary.aov,listof)并且没有内置的plot.summary.aov函数。出于兴趣,您期望显示什么是方差分析的摘要图? -
你看到的是S3 method dispatch(或者没有,对于摘要对象)。
-
@Limey 实际上我的问题不是关于绘制一个 aov 夏季对象,而是关于 S3 方法调度的问题。我构建了一个包,它会根据提供的类做出不同的反应。这就是我的问题的背景。
-
啊!很公平。