Sto cercando di eseguire un inner join su due tabelle usando dplyr, e penso di essere bloccato da regole di valutazione non standard. Quando si utilizza l'argomento by = ("a" = "b"), tutto funziona come previsto quando "a" e "b" sono stringhe reali. Ecco un esempio giocattolo che funziona:Dplyr join on = (a = b), dove a e b sono variabili contenenti stringhe?
library(dplyr)
data(iris)
inner_join(iris, iris, by=c("Sepal.Length" = "Sepal.Width"))
Ma diciamo che stavo mettendo inner_join in una funzione:
library(dplyr)
data(iris)
myfn <- function(xname, yname) {
data(iris)
inner_join(iris, iris, by=c(xname = yname))
}
myfn("Sepal.Length", "Sepal.Width")
Ciò restituisce il seguente errore:
Error: cannot join on columns 'xname' x 'Sepal.Width': index out of bounds
Sospetto che ci è un'espressione di fantasia, deparabile, citante o non quotata che potrei fare per farlo funzionare, ma sono un po 'torbido su quei dettagli.
Hadley chiama questa [ "valutazione non standard "] (http://adv-r.had.co.nz/Computing-on-the-language.html) (NSE) – smci
Sembra non tanto NSE quanto fornire" by.x "e" by.y " nomi di colonne in un modo diverso. L'argomento 'by' diventa' c ("Sepal.Length" = "Sepal.Width") 'e quindi quale sarebbe l'argomento' by.x' su 'merge' diventa un vero nome R. In effetti è quasi l'opposto di NSE come lo vedo. –