2016-06-29 22 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)) 

實例分析(測試如果交互模型是不同的)將被拍成功能:

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

如果目標是創建泛型函數invinteract,解決了上面的任意變量名稱和數據集的問題,將變量名稱從function()自變量傳遞到與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

謝謝!這是一個非常好的解決方案。與一系列paste()用法相比,sprintf()表示法使得它非常乾淨 – CarlAH

相關問題