Dplyr beitreten auf durch=(a = b), wo a und b sind Variablen mit strings?

Ich versuche, führen Sie eine inner join zwei Tabellen mit dplyr, und ich glaube, ich bin immer ausgelöst durch nicht-standard-Bewertung Regeln. Bei der Verwendung der durch=("a" = "b") - argument, funktioniert alles wie erwartet, wenn "a" und "b" sind die tatsächlichen Zeichenfolgen. Hier ist ein Spielzeug-Beispiel, das funktioniert:

library(dplyr)
data(iris)

inner_join(iris, iris, by=c("Sepal.Length" = "Sepal.Width"))

Aber sagen wir, ich war putting inner_join in einer Funktion:

library(dplyr)
data(iris)

myfn <- function(xname, yname) {
    data(iris)
    inner_join(iris, iris, by=c(xname = yname))
}

myfn("Sepal.Length", "Sepal.Width")

Dieser gibt die folgende Fehlermeldung zurück:

Error: cannot join on columns 'xname' x 'Sepal.Width': index out of bounds

Ich vermute, es wird einige Phantasie-Ausdruck, deparsing, zitieren, oder unquoting, dass ich tun konnte, um diese Arbeit zu machen, aber ich bin ein bisschen trübe auf diese details.

  • Hadley nennt dies "nicht-standard-Auswertung" (NSE)
  • Scheint nicht so viel NSE wie die Bereitstellung der "durch.x" und "durch.y" - Spalte mit den Namen in einer anderen Art und Weise. Die by-argument wird c("Sepal.Length" = "Sepal.Width") und was wäre also die by.x argument merge zu einem echten R-Namen. In der Tat, es ist fast das Gegenteil von NSE als ich es sehen.
InformationsquelleAutor Peter | 2015-02-08
Schreibe einen Kommentar