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.