潜在的な説明変数の長いベクトルを実行し、それぞれの応答変数を順番に回帰させたいと考えています。モデル式を貼り付けるのではなく、ここで示すようreformulate()
に
を使用することを考えています。
以下の関数fun()
は、目的のモデルに合わせて仕事をしているようです。ただし、 call 要素には、 valueではなく、構築された Formula オブジェクトの名前が記録されていることに注意してください。
## (1) Function using programmatically constructed formula
fun <- function(XX) {
ff <- reformulate(response="mpg", termlabels=XX)
lm(ff, data=mtcars)
}
fun(XX=c("cyl", "disp"))
#
# Call:
# lm(formula = ff, data = mtcars) <<<--- Note recorded call
#
# Coefficients:
# (Intercept) cyl disp
# 34.66099 -1.58728 -0.02058
## (2) Result of directly specified formula (just for purposes of comparison)
lm(mpg ~ cyl + disp, data=mtcars)
#
# Call:
# lm(formula = mpg ~ cyl + disp, data = mtcars) <<<--- Note recorded call
#
# Coefficients:
# (Intercept) cyl disp
# 34.66099 -1.58728 -0.02058
私の質問:これに危険はありますか? update
たとえば、後でやpredict
その他の関数をモデル フィット オブジェクトに (おそらく他の環境から)適用したい場合、これが問題になる可能性はありますか?
それにもかかわらず、録音された通話を正しく取得するためのやや厄介な代替手段は、 を使用することeval(substitute())
です。これは一般的により安全な構造ですか?
fun2 <- function(XX) {
ff <- reformulate(response="mpg", termlabels=XX)
eval(substitute(lm(FF, data=mtcars), list(FF=ff)))
}
fun2(XX=c("cyl", "disp"))$call
## lm(formula = mpg ~ cyl + disp, data = mtcars)