Comment puis-je passer un nom de colonne dans une fonction similaire à la question ici mais en utilisant dplyr code> chaînage et filtre () code> avec % en% en% code>. fun1 <- function(x, column, n){
res <-
x %>% filter(column %in% n)
return(res)
}
fun1(df, A, c(1,2))
3 Réponses :
Vous pouvez essayer ou p>
C'est quelque chose de bon à voir maintenant. Quand j'ai posé une question similaire il y a un moment, @aosmith a fourni une bonne réponse. Ici, je vois une version mise à jour. Aujourd'hui, je prends des notes. :) +1
@akrun pourriez-vous mettre une explication à votre option 2 - match.Call () code> contient tous les arguments mis à l'intérieur de la fonction? Et comment cela devient-il interprétable par filtre () code> dans eval () code>?
@ user3375672 Oui, Match.Call () contient tous les arguments. Ici, le jeu de données est le Envir code> (i.e. x code>) de la colonne. S'il vous plaît vérifier ? Eval code>
Si vous souhaitez conserver votre fonction, essayez:
fun1 <- function(x, column, n){
res <- x %>% filter_(paste(column,"%in%",n))
return(res)
}
fun1(df, "A", "c(1,2)")
Essayez de changer votre fonction sur
fun1 <- function(x, column, n){
require(lazyeval)
filter_(x,
interp(quote(col %in% n),
col = lazy(column), n = n))
}
all(fun1(df, A, c(1, 2)) == filter(df, A %in% c(1,2)))
# TRUE