2

次の関数が与えられます:

f <- function (x, y, data) {
    linm <- lm(y ~ x, data)
    summary(linm)$r.squared
}

次の呼び出しは失敗します。

d <- data.frame(a = c(1, 2), b = c(3, 4), d = c(5, 6))
f('a', 'b', d)

明らかに列をlm検索し、変数名をその内容に置き換えるのではないため)。どうすればこれを修正できますか?xy

表現をいじってみましsubstituteたが、無駄になりました。残念ながら、Rがこれらのオブジェクトをどのように処理し、どのコンテキストで式が評価されるのかを完全には理解していないため、結果として盲目的に飛んでいます。これが私が試したものです(動作していません):

exp <- substitute(expression(y ~ x), list(x = x, y = y))
linm <- lm(formula = exp, data = data)

検査するとき、expオブジェクトは実際に有望に見えます。残念ながら、私はlmそれを飲み込むように説得することはできません。

4

1 に答える 1

7

機能を使用することができformulaます。以下はうまくいくはずです:

f <- function (x, y, data) {
    linm <- lm(formula(paste(y,"~",x)), data)
    summary(linm)$r.squared
}
于 2013-02-07T18:21:49.110 に答える