2017-10-07 2 views
1

J'ai écrit cette fonction qui vient de remplacer chaque valeur dans une colonne de table de données avec son sous-chaîne:Comment faire passer un nom de colonne dans une fonction personnalisée, qui utilise dplyr?

substrColName <- function(df, colName, start) { 
    df %>% mutate(colName = substr(colName, start=start, stop=nchar(colName))) 
} 

Mais chaque fois que je l'exécuter je reçois l'erreur:

Error in as.character(x) : cannot coerce type 'closure' to vector of type 'character' 

Maintenant, je J'ai fait beaucoup de recherches pour savoir pourquoi ça ne marchera pas mais je ne peux pas le comprendre. J'ai lu sur certaines choses avec des évaluations standard et lazyeval mais rien que j'essaie semble fonctionner. De l'aide?

Merci

+0

Pouvez-vous fournir les données dont vous avez exécuté la fonction sur? – useR

+0

Voir https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html pour apprendre la programmation avec dplyr. – www

Répondre

1

Merci, @ycw, qui était une lecture agréable. Je l'ai maintenant travailler après avoir travaillé sur l'article. Ce fut la solution à la fin de la journée:

substrColName <- function(df, colName, start) { 
    colNameQuo <- enquo(colName) 
    df %>% mutate(!!quo_name(colNameQuo) := substr(!!colNameQuo, start=start,stop=nchar(!!colNameQuo))) 
} 

And this is ycw's comment.

+0

Vous pouvez accepter votre propre réponse :) – useR