7
votes

R, Nom de colonne Pass comme argument pour fonctionner à l'aide de dplyr :: filtre () et% en% en%

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))


0 commentaires

3 Réponses :


9
votes

Vous pouvez essayer xxx

ou xxx


3 commentaires

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 () contient tous les arguments mis à l'intérieur de la fonction? Et comment cela devient-il interprétable par filtre () dans eval () ?


@ user3375672 Oui, Match.Call () contient tous les arguments. Ici, le jeu de données est le Envir (i.e. x ) de la colonne. S'il vous plaît vérifier ? Eval



4
votes

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)")


0 commentaires

2
votes

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


0 commentaires