我试图弄清楚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的那一面来解决它。
答案 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中实现此特定功能,我个人将很想知道!