Suponha que eu mantenha dois pacotes, chame-os de foo
e bar
. bar
exporta uma função baz
e foo
a importa no arquivo help.R usando @importFrom
, ou seja, em foo/R/help.R existe uma linha <strong i="11">@importFrom</strong> bar baz
. Quando eu document
o arquivo de namespace é criado corretamente para que tenha importFrom(bar,baz)
.
Agora suponha que eu mude o nome de baz
para bash
no pacote bar
. Eu atualizo foo/R/help.R para <strong i="19">@importFrom</strong> bar bash
. Quando eu document
, porém, o namespace adiciona corretamente importFrom(bar,bash)
, mas não exclui importFrom(bar,baz)
então recebo erros ao executar install
.
Estou usando o argumento clean = TRUE
pensando que isso também limparia, mas parece que isso só vai para os arquivos man. Estou faltando alguma coisa aqui? Ou isso é um bug?
Obrigado!
Você está usando a versão mais recente do roxygen2? Ele deve recriar o arquivo NAMESPACE do zero todas as vezes.
Sim, estou usando roxygen2 v3.0.0
SessãoInfo()
R versão 3.0.2 (2013-09-25)
Plataforma: x86_64-apple-darwin10.8.0 (64 bits)
localidade:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
pacotes de base anexados:
[1] estatísticas conjuntos de dados gráficos grDevices utils métodos base
outros pacotes anexados:
[1] plyr_1.8 ...
extrafont_0.15
[25] roxygen2_3.0.0 testthat_0.7.1
[27] devtools_1.4.1
carregado por meio de um namespace (e não anexado):
[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] assessment_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 rotulagem_0.2 lattice_0.20-24 lubridate_1.3.3 MASS_7.3-29
[26] memoise_0.1 munsell_0.4.2 parallel_3.0.2 proto_0.3-10 R.cache_0.9.0
[31] R.methodsS3_1.5.2 R.oo_1.15.8 R.utils_1.28.4 RColorBrewer_1.0-5 RCurl_1.95-4.1
[36] remodelar2_1.2.2 rjson_0.2.13 Rttf2pt1_1.2 scales_0.2.3 splines_3.0.2
[41] stringr_0.6.2 survival_2.37-4 tools_3.0.2 whisker_0.3-2 xtable_1.7-1
Tem certeza de que não tem outro <strong i="5">@importFrom</strong> x y
em outro lugar?
Nada óbvio, mas parece que devo ter algo demorando onde não esperava. Vou continuar procurando; desculpe incomodar.
Estou reabrindo este problema porque consegui criar um MWE que produz um erro associado a @importFrom
(embora não tenha certeza absoluta em relação ao meu post original).
Construí um pacote esqueleto com arquivos barebones e editei apenas o arquivo help.R
, que é bem simples:
#' <strong i="9">@docType</strong> package
#'
#' <strong i="10">@importFrom</strong> plyr ddply
NULL
Quando eu chamo document(package_directory, clean = TRUE)
(onde package_directory
é uma variável que contém o caminho para o pacote), tudo funciona bem. Agora, eu mudo help.R
para:
#' <strong i="17">@docType</strong> package
#'
#' <strong i="18">@importFrom</strong> plyr
NULL
e chame document(package_directory, clean = TRUE)
, o que causa um erro, conforme esperado:
Error in asChar(ivars) :
empty name in directive 'importFrom' in 'NAMESPACE' file
Agora, vamos voltar e corrigir o help.R
para que ele volte ao original:
#' <strong i="27">@docType</strong> package
#'
#' <strong i="28">@importFrom</strong> plyr ddply
NULL
Quando eu pago document(package_directory, clean = TRUE)
, surpreendentemente ainda recebo o erro que recebi quando quebrou help.R
. Eu teria pensado que funcionaria bem aqui porque document
ignora o arquivo NAMESPACE
.
Uma reviravolta adicional é que, se em vez de usar document
depois de quebrar as coisas, eu usar roxygenize
, funciona bem.
De acordo com a documentação roxygen
, "Se você tem um pacote simples, você pode usar roxygenise()
, mas para algo mais complicado, eu recomendo que você use document()
." Então, por que document
não funciona aqui, mas roxygenize
sim? E quando cada um deve ser usado?
Quanto às versões, estou atualizado:
> 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, o problema é que document()
primeiro precisa rodar load_all()
para carregar o pacote, e uma vez que você quebrou o namespace não tem como carregá-lo. Nesse cenário, costumo desfazer a alteração no git.
exclua o arquivo de namespace e faça load_all() e, em seguida, faça devtools::docuement(). Deve fazer o trabalho.
Este problema antigo foi bloqueado automaticamente. Se você acredita ter encontrado um problema relacionado, registre um novo problema (com reprex) e vincule-o a este problema. https://reprex.tidyverse.org/
Comentários muito úteis
exclua o arquivo de namespace e faça load_all() e, em seguida, faça devtools::docuement(). Deve fazer o trabalho.