Dplyr joindre par=(a = b), où a et b sont des variables contenant des chaînes de caractères?

Je suis en train d'effectuer une jointure de deux tables à l'aide de dplyr, et je pense que je suis fauché par des non-standard des règles d'évaluation. Lors de l'utilisation de la par=("a" = "b") argument, tout fonctionne comme prévu lorsque "a" et "b" sont des chaînes de caractères. Voici un exemple jouet qui fonctionne:

library(dplyr)
data(iris)

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

Mais disons que je met inner_join dans une fonction:

library(dplyr)
data(iris)

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

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

Renvoie le message d'erreur suivant:

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

Je soupçonne qu'il ya un peu de fantaisie expression, deparsing, citant, ou unquoting que je pourrais faire pour faire ce travail, mais je suis un peu trouble sur ces détails.

  • Hadley appelle cette "non-standard d'évaluation" (NSE)
  • Semble pas tellement NSE que la prestation de la "en.x" et "par.y" les noms de colonne dans une manière différente. Le by-argument devient c("Sepal.Length" = "Sepal.Width") et donc ce serait la by.x argument merge devient un réel R nom. En fait, c'est presque à l'opposé du NSE comme je l'ai vue il.
InformationsquelleAutor Peter | 2015-02-08