Verwenden von Einfügen und Ersetzen in Kombination mit Anführungszeichen in R

Bitte beachte, dass ich mir das schon angeschaut habediese undDas kann aber immer noch nicht mein problem lösen.

Angenommen, ein minimales Arbeitsbeispiel:

a <- c(1,2,3)
b <- c(2,3,4)
c <- c(4,5,6)
dftest <- data.frame(a,b,c)

foo <- function(x, y, data = data) {
    data[, c("x","y")]
    }
foo(a, b, data = dftest)

Hier gibt die letzte Zeile offensichtlich ein zurückError: undefined columns selected. Dieser Fehler wird zurückgegeben, weil die zu selektierenden Spalten sindx undy, die nicht Teil des Datenrahmens sinddftest.

Frage: Wie muss ich die Definition der Funktion formulieren, um die gewünschte Ausgabe zu erhalten?

> dftest[, c("a","b")]
#   a b
# 1 1 2
# 2 2 3
# 3 3 4

das möchte ich durch aufruf der funktion erhaltenfoo.

Bitte beachten Sie, dass das Format des Funktionsaufrufs von, damit die Lösung für meine Zwecke nützlich istfoo ist als fest anzusehen, das heißt, die einzigen Änderungen sind an der Funktion selbst vorzunehmen, nicht am Aufruf. Das heißtfoo(a, b, data = dftest) ist die einzige Eingabe, die erlaubt ist.

Ansatz: Ich habe versucht, zu verwendenpaste undsubstitute in Kombination miteval um zuerst die zu ersetzenx undy mit den Argumenten des Funktionsaufrufs und werte dann den Aufruf aus. Das Entziehen der Anführungszeichen scheint hier jedoch ein Problem zu sein:

foo <- function(x, y, data = data) {
    substitute(data[, paste("c(\"",x,"\",\"",y,"\")", sep = "")])
    }
foo(a, b, data = dftest)    
eval(foo(a, b, data = dftest))

Hier,foo(a, b, data = dftest) kehrt zurück:

dftest[, paste("c(\"", a, "\",\"", b, "\")", sep = "")]

Bei der Auswertung miteval() (konzentriert sich nur auf diepaste Teil),

paste("c(\"", a, "\",\"", b, "\")", sep = "")

kehrt zurück:

# "c(\"1\",\"2\")" "c(\"2\",\"3\")" "c(\"3\",\"4\")"

und nicht, wie ich hoffen würdec("a","b")Dies führt wiederum zu demselben Fehler wie oben.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage