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