2016-06-29 12 views
0

Ich bin auf der Suche nach einer einfachen Möglichkeit, Funktionsargumente, die Variablennamen sind, in Formeln in R-Funktionen übergeben.Übergeben Sie Funktionsargumente, die Variablennamen sind, in Formeln in R-Funktionen?

Test-Daten-Set:

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)) 

Beispiel Analyse (Prüfung, ob Interaktionsmodell unterscheidet), um in Funktion vorgenommen werden:

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

Wenn das Ziel, die generische Funktion invinteract zu erstellen, die das löst Problem oben mit willkürlichen Variablennamen und Datensätzen, was wäre der einfachste Weg, um Variablennamen von function() Argumente zu Formeln geben Begriffe entsprechend den Positionen von out, alfa und beta?

Das Einfügen der rohen Variablennamen in die Formeln funktioniert nicht, weil R versucht, die Namen als Objekte auszuwerten und nichts zu finden.

Das direkte Einfügen von String-Variablennamen in Formeln funktioniert auch nicht.

Ist es notwendig, die Formeln mit paste() zu rekonstruieren, oder gibt es einen direkteren Weg?

Antwort

1

glm akzeptiert auch eine Zeichenkette anstelle einer Formel. So können Sie dies tun:

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

Vielen Dank! Das ist eine wirklich saubere Lösung. Die sprintf() -Notation macht es im Vergleich zu einer Folge von paste() -Verwendungen ziemlich sauber – CarlAH