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!
¿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/
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.