2009-07-31 64 views
5

我正在寫一個函數,它接受兩個變量並分別對一組控件表示爲單側公式。現在,我使用下面,以便爲迴歸的一個公式,但感覺有點砍死向上:在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

這裏有一個辦法:

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

update(right, left_2) 

但我認爲你將不得不要麼粘貼文本串在一起,或使用替代品。據我所知,沒有功能可以從兩個單面公式(或類似的等價物)創建一個雙面公式。

+0

八年後,基於問題還是一般的rlang包,我是否還有更好的答案? – rcorty 2017-10-06 16:45:36

1

我不確定update.formula(),但我已經使用了您在此處粘貼文本並通過as.formula轉換成的方法。我對help(update.formula)的讀法並沒有讓我覺得你可以根據你的願望來替代左手邊。

最後,請相信調度機制。如果您反對的是公式類型,只需撥打update,這比明確的update.formula優先。