Passer la fonction comme paramètre en utilisant le contexte tidy_eval / rlang

Jesse Kerr

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é

aosmith

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment obtenir la valeur de retour d'une fonction en utilisant le contexte comme paramètre?

Passer le texte actuel comme paramètre à la fonction jquery

Passer la fonction comme paramètre de modèle

Passer le paramètre dans la fonction jquery comme en javascript onclick

Comment passer le paramètre à la fonction en utilisant dans addEventListener?

Passer la fonction comme paramètre

Passer la fonction paresseuse comme paramètre

Comment passer le texte d'un QWidget via le paramètre de Slot en utilisant la fonction lambda

Comment renvoyer la valeur de DLL en utilisant le paramètre de la fonction comme pointeur en C ++?

Passer le contexte du composant de fonction en tant que paramètre dans React

passer directement le retour (et l'appel) de la fonction comme un autre paramètre directement en C

En C, pourquoi puis-je passer le nom de la fonction (pas un pointeur) comme paramètre à funtion?

Passer le nom de la colonne comme paramètre à la fonction R

Passer le paramètre à la fonction (e)

comment passer la fonction en paramètre en utilisant la fermeture dans swift 5

Passer la fonction coroutine comme paramètre de fonction

Passer le nom de la propriété System .Property comme paramètre de fonction

Comment passer la page comme argument dans le paramètre de fonction de page.evaluate ()?

Passer la fonction javascript en paramètre

Comment passer un contexte comme paramètre

Comment passer le deuxième paramètre à la fonction tout en utilisant la fonction de carte du package purrr dans R

Scala-passer la valeur à la fonction comme paramètre

Comment passer le nom de l'objet en tant que paramètre via la variable définie comme fonction sur une autre fonction?

Comment passer le type retourné en paramètre à une nouvelle fonction (comme si la fonction était à l'intérieur du type de retour) ? js

Passer lambda comme paramètre de fonction de modèle

Passer le retour comme paramètre pour une autre fonction

Comment passer le temps futur en utilisant "depart_time" comme paramètre dans la requête HTTP via l'API de matrice de distance

Comment passer une fonction comme paramètre en Java?

Comment passer: comme paramètre de fonction en python?

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive