为什么有plot.lm帮助页面,而函数plot.lm不存在

时间:2017-06-06 13:47:37

标签: r

我试图弄清楚plot对象的默认r lm的残差与拟合图中使用了哪种平滑线,所以我通过键入{{检查了帮助页面1}},因为据我所知,?plot.lm是如何定义不同对象类型的这种默认行为。

正如预期的那样有一个帮助页面,但没有特别提到残差与拟合图中的平滑线,所以我想检查基本代码,通常对于一个函数,你可以通过在控制台没有支架。但是在控制台中输入<function>.<type>会产生错误plot.lm。由于帮助页面显示它位于object 'plot.lm' not found包中,我还尝试了stats,但没有效果。我尝试了stats::plot.lm和一些plot变体,例如plot.<something>,它们确实存在并提供了代码。

为什么有plot.default的帮助页面,而似乎没有名为plot.lm的函数,plot.lm对象的绘图行为如果不在{lm中定义1}}?

我希望它与S3和S4方法之间的区别有关,但我不太了解R的那一面来解决它。

1 个答案:

答案 0 :(得分:0)

我最近在编写一个函数来绘制默认plot.lm()时使用ggplot2时遇到了这个问题。从源代码可以看出,plot.lm()调用panel.smooth(),后者又调用stats :: lowess(),其源代码为:

function (x, y = NULL, f = 2/3, iter = 3L, delta = 0.01 * diff(range(x))) 
{
    xy <- xy.coords(x, y, setLab = FALSE)
    o <- order(xy$x)
    x <- as.double(xy$x[o])
    list(x = x, y = .Call(C_lowess, x, as.double(xy$y[o]), f, 
        iter, delta))
}

因此我们可以看到它调用C_lowess()。不幸的是,我似乎无法在R中访问此函数的源代码。我认为它是用C / C ++编写的。但是,最初的实现似乎来自著名统计学家William Cleveland的this paper。如果有人知道如何在R中实现此特定功能,我个人将很想知道!