【发布时间】:2014-04-22 05:19:38
【问题描述】:
我是 R 和统计的新手。所以这个问题可能有点愚蠢,但我想知道R中的predict()和predict.lm()有什么区别吗?我认为它们是相同的,但如果它们是相同的,为什么会有两个不同的功能?
【问题讨论】:
我是 R 和统计的新手。所以这个问题可能有点愚蠢,但我想知道R中的predict()和predict.lm()有什么区别吗?我认为它们是相同的,但如果它们是相同的,为什么会有两个不同的功能?
【问题讨论】:
如果predict 的第一个参数具有类“lm”,则没有区别。 R generic functions 例如 predict 会根据类的名称分派到特定于类的版本。你可以通过执行来查看加载的命名空间中存在什么版本的预测:
methods(predict)
我现在加载了大量的包,所以列表很长:
> methods(predict)
[1] predict.ar* predict.areg
[3] predict.areg.boot predict.Arima*
[5] predict.arima0* predict.bj*
[7] predict.bs* predict.bSpline*
[9] predict.coxph* predict.coxph.penal*
[11] predict.cph* predict.dataRep
[13] predict.glm predict.Glm*
[15] predict.glmmPQL* predict.glmtree*
[17] predict.gls* predict.Gls*
[19] predict.gnls* predict.goodfit*
[21] predict.HoltWinters* predict.lda*
[23] predict.lm predict.lme*
[25] predict.lmList* predict.lmtree*
[27] predict.loess* predict.lqs*
[29] predict.lrm* predict.mca*
[31] predict.mlm predict.modelparty
[33] predict.nbSpline* predict.nlme*
[35] predict.nls* predict.npolySpline*
[37] predict.ns* predict.ols*
[39] predict.orm* predict.party*
[41] predict.pbSpline* predict.plm*
[43] predict.polr* predict.poly
[45] predict.polySpline* predict.ppolySpline*
[47] predict.ppr* predict.prcomp*
[49] predict.princomp* predict.psm*
[51] predict.pspline* predict.qda*
[53] predict.rlm* predict.Rq*
[55] predict.smooth.spline* predict.smooth.spline.fit*
[57] predict.StructTS* predict.survreg*
[59] predict.survreg.penal* predict.transcan
【讨论】:
Non-visible functions are asterisked。那是.foo 类型的隐藏函数吗?
pkg_name:::fn_name 或getAnywhere(fn_name)。 (不要将星号放在“fn_name”中。)我认为第二个比三冒号运算符稍微强大一些,但我不知道::: 的精确限制。
getAnywhere 很好。
正如lm 指出的那样,它是相同的,因为预测立即调度到predict.lm,是
> predict
function (object, ...)
UseMethod("predict")
但一般来说,最好使用泛型函数(如predict)而不是直接方法(在这种情况下为predict.lm),因为经过一些操作/检查后,可以通过UseMethod 调用适当的方法在泛型函数内部。一个例子是as.data.frame:
> as.data.frame
function (x, row.names = NULL, optional = FALSE, ...)
{
if (is.null(x))
return(as.data.frame(list()))
UseMethod("as.data.frame")
}
【讨论】: