Devtools: namespace não exclui informações antigas quando @importFrom muda

Criado em 3 jan. 2014  ·  8Comentários  ·  Fonte: r-lib/devtools

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!

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.

Todos 8 comentários

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/

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Mullefa picture Mullefa  ·  6Comentários

bbolker picture bbolker  ·  4Comentários

stevecondylios picture stevecondylios  ·  3Comentários

nick-youngblut picture nick-youngblut  ·  6Comentários

HaydenMacDonald picture HaydenMacDonald  ·  6Comentários