J'ai une fonction à laquelle je souhaite transmettre une fonction. Cependant, je n'arrive pas à le faire fonctionner en utilisant le contexte tidy_eval.
Voici quelques données:
df <- tribble(
~A, ~B,
"hi", "hello",
"bye", "later"
)
Je veux pouvoir appeler la fonction comme ceci:
my_quoting_fn(df, A, str_detect(., pattern = "h*"))
où le troisième paramètre peut être n'importe quelle fonction différente.
Voici ma première tentative d'écrire la fonction:
my_quoting_fn <- function(df, col, func) {
func <- enquo(func)
expr <- quo_get_expr(func)
df %>%
pull({{col}}) %>%
eval(expr)
Ce qui précède donne l'erreur:
Erreur dans eval (., Expr): argument 'envir' invalide de type 'language'`
Si j'essaye:
my_quoting_fn <- function(df, col, func) {
df %>%
pull({{col}}) %>%
{{func}}
J'obtiens l'erreur
Erreur dans stri_detect_regex (string, pattern, negate = negate, opts_regex = opts (pattern)): object '.' pas trouvé
Si vous passez votre fonction sous forme de formule avec un tilde ( ~
), vous pouvez utiliser rlang::as_function()
.
my_quoting_fn <- function(df, col, func) {
func = as_function(func)
df %>%
pull({{col}}) %>%
func
}
my_quoting_fn(df, A, ~str_detect(., pattern = "h*"))
[1] TRUE TRUE
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots