2016-06-29 7 views
0

私は変数名である関数の引数をR関数の式に簡単に渡す方法を探しています。R関数の変数名である関数の引数を式に渡しますか?

テストデータセット:

set.seed(4892) 
df.pass <- data.frame("alfa"=sample(1:9, 100, replace=T), "beta"=sample(1:9, 100, replace=T), 
         "theta"=sample(1:9, 100, replace=T), "out"=runif(100, 0, 1)) 

例解析(相互作用モデルが異なる場合、テスト)機能化されるべき:目標は解決汎用関数invinteractを作成する場合

lrtest(glm(out~alfa*beta, family = binomial("logit"), df.pass), 
     glm(out~alfa + beta, family = binomial("logit"), df.pass)) 

任意の変数名とデータセットを持つ上記の問題、引数からout、の位置に対応する式の項に変数名を渡す最も簡単な方法は何でしょうかおよびbeta

Rは名前をオブジェクトとして評価して何も見つからないため、未処理の変数名を式に挿入することはできません。

文字列変数名を直接式に挿入することもできません。

paste()で数式を再構築する必要がありますか、より直接的な方法はありますか?

答えて

1

glmは、式の代わりに文字列も受け入れます。したがって、これを行うことができます:

mytest <- function(DF, y, x1, x2) { 
    lrtest(glm(sprintf("%s ~ %s * %s", y, x1, x2), family = binomial("logit"), DF), 
     glm(sprintf("%s ~ %s + %s", y, x1, x2), family = binomial("logit"), DF)) 
} 
mytest(df.pass, "out", "alfa", "beta") 
+0

ありがとう!それは本当にきれいな解決策です。 sprintf()の表記法は、paste()の連続使用に比べてきれいにします – CarlAH

関連する問題