数式を使用するモデル構築関数をプログラムしようとしていますが、モデルupdate
関数の仕組みを理解するのに問題があります。
関数を使用するとエラーになる、簡略化された関数を次に示しupdate
ます。
modelx <- function(formula) {
mf <- mc <- match.call()
mf <- mf[c(1L, match("formula", names(mf), 0L))]
mf[[1L]] <- as.name("model.frame")
mf <- eval(mf, parent.frame())
y <- model.response(mf, "numeric")
mt <- attr(mf, "terms")
X <- model.matrix(mt, mf)
out<-list(y=y,X=X)
out$call<-mc
out
}
コードはlm
関数の最初からほとんどコピーされています。いくつかのサンプル データと 2 つのモデル:
y<-x<-x1<-x2<-1:10
model<-modelx(y ~ x)
model1<-modelx(y ~ x1)
最初のモデルの更新は機能しませんが、2 番目のモデルは機能します。
model<-update(model, . ~ . + x2)
Error in model.frame.default(formula = y ~ x + x2) :
invalid type (list) for variable 'x'
model1<-update(model1, . ~ . + x2)
out$terms <- mt
の出力にコンポーネントを追加するとmodelx
、両方のケースですべてが機能します。このコンポーネントが必要な理由と、2 番目のケースではそれがなくても更新機能が機能するのに、最初のケースでは機能しないのはなぜですか?