R: utiliser l’opérateur de canalisation magrittr dans un package auto-écrit

Je voudrais utiliser l’opérateur de pipe %>% introduit dans le paquetage magrittr dans un paquet que j’ai moi-même écrit pour enchaîner les transformations de données de dplyr . magrittr est répertorié comme Import dans le fichier DESCRIPTION . Après avoir chargé mon propre package et testé la fonction qui utilise l’opérateur de tube, j’obtiens le message d’erreur suivant:

Erreur dans functionname (paramètre,: impossible de trouver la fonction “%>%”

Changer %>% en magrittr::%>% dans le code source de la fonction n’aide pas non plus car le package ne peut plus être généré.

Cela aurait dû fonctionner correctement si magrittr était répertorié dans Depends . Cependant, ceci n’est pas conseillé . Au lieu de cela, vous quittez magrittr dans Imports et ajoutez la ligne suivante à NAMESPACE :

 importFrom(magrittr,"%>%") 

Je suggère de lire les extensions Writing R. Votre question est traitée aux paragraphes 1.1.3 et 1.5.1.

Une solution supplémentaire – utilisez le package roxygen . Il est implémenté dans le paquet devtools . Une fois que devtools est installé, appeler devtools::document() mettra à jour votre NAMESPACE pour vous. Il crée également automatiquement des fichiers .Rd avec de la documentation, ce qui est pratique.

Tout ce que vous avez à faire est d’append un commentaire spécial au format #' @import packagename à un fichier pour importer toutes les fonctions de ce paquet, ou #' @importFrom packagename functionname pour importer une fonction. Vous pouvez avoir autant de commentaires que vous le souhaitez dans vos fichiers, de sorte que vous pouvez en avoir un ensemble en haut de chaque fichier ou avec chacune de vos fonctions nécessitant une fonction externe.

Ensuite, vous exécutez devtools::document() et il parsing votre code à la recherche de ces commentaires, puis crée un fichier NAMESPACE approprié pour vous. Facile.

En supposant que vous utilisiez RStudio, le paquet devtools de Hadley, et que vous avez listé magrittr dans la section Imports du fichier DESCRIPTION , voici les étapes à suivre pour que %>% fonctionne dans la ou les fonctions de mon paquet.

Tout d’abord, écrivez la fonction foo.R :

 #' Convert \code{data.frame} to \code{list}. #' #' @importFrom magrittr %>% #' @name %>% #' @rdname pipe #' @export #' @param x A \code{data.frame} object. #' @examples #' my_result <- foo(iris) #' foo <- function(x) { x %>% as.list() } 

Deuxièmement, exécutez devtools::document() .

Troisièmement, exécutez devtools::load_all() .

Un fichier comme celui- ci sera créé dans votre répertoire R/ et votre fonction devrait fonctionner comme prévu.