Devtools: el espacio de nombres no elimina la información antigua cuando @importFrom cambia

Creado en 3 ene. 2014  ·  8Comentarios  ·  Fuente: r-lib/devtools

Supongamos que mantengo dos paquetes, los llamo foo y bar . bar exporta una función baz y foo la importa en el archivo help.R usando @importFrom , es decir, en foo/R/help.R hay una línea <strong i="11">@importFrom</strong> bar baz . Cuando hago document el archivo de espacio de nombres se crea correctamente, por lo que tiene importFrom(bar,baz) .

Ahora supongamos que cambio el nombre de baz a bash en el paquete bar . Actualicé foo/R/help.R a <strong i="19">@importFrom</strong> bar bash . Sin embargo, cuando document , el espacio de nombres agrega correctamente importFrom(bar,bash) pero no elimina importFrom(bar,baz) por lo que recibo errores cuando ejecuto install .

Estoy usando el argumento clean = TRUE pensando que eso también limpiaría esto, pero parece que eso solo va a los archivos man. ¿Me estoy perdiendo de algo? ¿O es esto un error?

¡Gracias!

Comentario más útil

elimine el archivo de espacio de nombres y haga load_all() y luego haga devtools::docuement(). Debería hacer el trabajo.

Todos 8 comentarios

¿Está utilizando la última versión de roxygen2? Debería volver a crear el archivo NAMESPACE desde cero cada vez.

Sí, estoy usando roxygen2 v3.0.0

sessionInfo()
R versión 3.0.2 (2013-09-25)
Plataforma: x86_64-apple-darwin10.8.0 (64 bits)

lugar:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

Paquetes básicos adjuntos:
[1] estadísticas gráficos conjuntos de datos grDevices utils métodos base

otros paquetes adjuntos:
[1] plyr_1.8 ...
extrafont_0.15
[25] roxygen2_3.0.0 testthat_0.7.1
[27] devtools_1.4.1

cargado a través de un espacio de nombres (y no adjunto):
[1] biglm_0.9-1 boot_1.3-9 brew_1.0-6 cluster_1.14.4 codetools_0.2-8
[6] colorspace_1.2-4 corrplot_0.73 data.table_1.8.10 dichromat_2.0-0 digest_0.6.4
[11] evaluar_0.5.1 extrafontdb_1.0 formatR_0.10 Formula_1.1-1 ggplot2_0.9.3.1
[16] gmp_0.5-11 grid_3.0.2 gtable_0.1.2 Hmisc_3.13-0 httr_0.2
[21] knitr_1.5 labeling_0.2 lattice_0.20-24 lubridate_1.3.3 MASS_7.3-29
[26] memoise_0.1 munsell_0.4.2 paralelo_3.0.2 proto_0.3-10 R.cache_0.9.0
[31] R.métodosS3_1.5.2 R.oo_1.15.8 R.utils_1.28.4 RColorBrewer_1.0-5 RCurl_1.95-4.1
[36] reformar2_1.2.2 rjson_0.2.13 Rttf2pt1_1.2 scales_0.2.3 splines_3.0.2
[41] stringr_0.6.2 supervivencia_2.37-4 herramientas_3.0.2 bigotes_0.3-2 xtable_1.7-1

¿Estás seguro de que no tienes otro <strong i="5">@importFrom</strong> x y en otro lugar?

Nada obvio, pero parece que debo tener algo persistente donde no lo espero. Seguiré buscando; Disculpa por ser una molestia.

Estoy reabriendo este problema porque pude crear un MWE que produce un error asociado con @importFrom (aunque no estoy completamente seguro de que esté relacionado con mi publicación original).

Construí un paquete de esqueleto con archivos barebones y solo edité el archivo help.R , que es muy simple:

#' <strong i="9">@docType</strong> package
#'
#' <strong i="10">@importFrom</strong> plyr ddply
NULL

Cuando llamo a document(package_directory, clean = TRUE) (donde package_directory es una variable que contiene la ruta al paquete), todo funciona bien. Ahora, cambio help.R a:

#' <strong i="17">@docType</strong> package
#'
#' <strong i="18">@importFrom</strong> plyr
NULL

y llame a document(package_directory, clean = TRUE) , lo que provoca un error, como se esperaba:

Error in asChar(ivars) : 
  empty name in directive 'importFrom' in 'NAMESPACE' file

Ahora, regresemos y arreglemos el help.R para que vuelva al original:

#' <strong i="27">@docType</strong> package
#'
#' <strong i="28">@importFrom</strong> plyr ddply
NULL

Cuando llamo a document(package_directory, clean = TRUE) , sorprendentemente sigo recibiendo el error que recibí cuando se rompió help.R . Hubiera pensado que habría funcionado bien aquí porque document ignora el archivo NAMESPACE .

Un giro adicional es que si en lugar de usar document después de romper cosas, uso roxygenize , funciona bien.

De acuerdo con la documentación roxygen , "Si tiene un paquete simple, puede usar roxygenise() , pero para algo más complicado, le recomiendo que use document() ". Entonces, ¿por qué document no funciona aquí pero roxygenize sí? ¿Y cuándo se debe usar cada uno?

En cuanto a versiones, estoy al día:

> sessionInfo()
R version 3.0.3 (2014-03-06)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  datasets  grDevices utils     methods   base     

other attached packages:
[1] plyr_1.8.1     extrafont_0.16 roxygen2_3.1.0 testthat_0.8.1 devtools_1.4.1

Ah, el problema es que document() primero necesita ejecutar load_all() para cargar el paquete, y una vez que haya roto el espacio de nombres no hay forma de cargarlo. En este escenario, generalmente solo deshago el cambio en git.

elimine el archivo de espacio de nombres y haga load_all() y luego haga devtools::docuement(). Debería hacer el trabajo.

Este antiguo problema se ha bloqueado automáticamente. Si cree que ha encontrado un problema relacionado, presente un nuevo problema (con reprex) y enlace a este problema. https://reprex.tidyverse.org/

¿Fue útil esta página
0 / 5 - 0 calificaciones