usar studio paquete mutate filtros curso con como comando agrupar r namespaces magrittr

studio - filtros con dplyr



R: use el operador de tubería magrittr en un paquete auto escrito (4)

Me gustaría usar el operador de tubería %>% introducido en el paquete magrittr en un paquete que escribí yo mismo para encadenar las transformaciones de datos dplyr . magrittr aparece como Import en el archivo DESCRIPTION . Después de cargar mi propio paquete y probar la función que utiliza el operador de tubería, aparece el siguiente mensaje de error:

Error en functionname (parámetro,: no se pudo encontrar la función "%>%"

Cambiar %>% a magrittr::%>% en el código fuente de la función tampoco ayuda porque el paquete ya no se puede construir.


Ahora hay una manera más fácil de soportar la tubería en sus paquetes. El maravilloso paquete usethis tiene la función use_pipe() . Ejecutas esa función una vez y se encarga de todo. Así es como se describe la función use_pipe() en la documentación de usethis :

¿La configuración es necesaria para usar la tubería de magrittr internamente en su paquete y para volver a exportarla para los usuarios de su paquete?

Agrega magrittr a "Importaciones" en la DESCRIPCIÓN

Crea R / utils-pipe.R con la plantilla roxygen necesaria


Debería haber funcionado correctamente si tuviera magrittr incluido en Depends . Sin embargo, esto no es aconsejable . En su lugar, deja magrittr en Imports y agrega la siguiente línea a NAMESPACE :

importFrom(magrittr,"%>%")

Sugiero leer Escritura de extensiones R. Su pregunta se trata en los párrafos 1.1.3 y 1.5.1.


Suponiendo que está utilizando RStudio, el paquete devtools de Hadley y magrittr enumerado en la sección Importaciones del archivo DESCRIPTION , estos son los pasos que tomé para que %>% funcione en las funciones de mi paquete.

Primero, escribe la función 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() }

En segundo lugar, ejecute devtools::document() .

Tercero, ejecute devtools::load_all() .

Se creará un archivo como este en su directorio R/ y su función debería funcionar como se espera.


Una solución adicional: use el paquete roxygen . Se implementa como parte del paquete devtools . Una vez que se instala devtools , llamar a devtools::document() actualizará su NAMESPACE por usted. También autocompila archivos .Rd con documentación, lo cual es útil.

Todo lo que debe hacer es agregar un comentario especial en el formato #'' @import packagename a un archivo para importar todas las funciones de ese paquete, o #'' @importFrom packagename functionname para importar una función. Puede tener tantos comentarios como desee en sus archivos, por lo que puede tener un conjunto de ellos en la parte superior de cada archivo, o con cada una de sus funciones que necesita una función externa.

Luego ejecuta devtools::document() y analiza su código en busca de esos comentarios, y luego crea un archivo NAMESPACE apropiado para usted. Fácil.