2009-07-31 1 views
5

私は、2つの変数を取り、それぞれを一方向の式として表現されたコントロールのセットで個別に回帰する関数を書いています。今、私は、回帰のいずれかの式を作るために、以下を使用していますが、少しハッキングアップ感じている:update.formulaの関数引数を使用する

foo <- function(x, y, controls) { 
    cl <- match.call() 
    xn <- cl[["x"]] 
    xf <- as.formula(paste(xn, deparse(controls))) 
} 

私はupdate.formula()を使用してこれを行うことを好むが、もちろんupdate.formula(controls, x ~ .)update.formula(controls, as.name(x) ~ .)のだろう動作しません。私は何をしなければならないのですか?

答えて

5

は、ここに1つのアプローチです:

right <- ~ a + b + c 
left <- ~ y 
left_2 <- substitute(left ~ ., list(left = left[[2]])) 

update(right, left_2) 

しかし、私はあなたが一緒にペーストテキスト文字列のいずれかに持っていると思う、または代替物を使用しています。私の知る限りでは、2つの片面式(または同等の同等物)から片面式を作成する機能はありません。

+0

8年後、quoureやrlangパッケージに基づいてより良い答えがあるのだろうか? – rcorty

1

私はupdate.formula()についてはわかりませんが、これまでテキストを貼り付けて過去に成功したas.formulaで変換したアプローチを使用しました。 help(update.formula)の私の読書は私があなたが望むように左側を代用できると思うようにはなりません。

最後に、ディスパッチメカニズムを信頼してください。オブジェクトが式の型である場合は、update.formulaより優先するupdateを呼び出すだけです。

関連する問題