Devtools: l'espace de noms ne supprime pas les anciennes informations lorsque @importFrom change

Créé le 3 janv. 2014  ·  8Commentaires  ·  Source: r-lib/devtools

Supposons que je gère deux packages, appelez-les foo et bar . bar exporte une fonction baz et foo l'importe dans le fichier help.R en utilisant @importFrom , c'est-à-dire que dans foo/R/help.R il y a une ligne <strong i="11">@importFrom</strong> bar baz . Lorsque je document le fichier d'espace de noms est correctement créé, il a donc importFrom(bar,baz) .

Supposons maintenant que je change le nom de baz en bash dans le package bar . Je mets à jour foo/R/help.R en <strong i="19">@importFrom</strong> bar bash . Quand je document cependant, l'espace de noms ajoute correctement importFrom(bar,bash) mais il ne supprime pas importFrom(bar,baz) donc j'obtiens des erreurs lors de l'exécution install .

J'utilise l'argument clean = TRUE en pensant que cela le nettoierait également, mais il semble que cela ne concerne que les fichiers man. Est-ce que j'ai râté quelque chose? Ou est-ce un bug ?

Merci!

Commentaire le plus utile

supprimez le fichier d'espace de noms et faites load_all() puis faites devtools::documentement(). Il devrait faire le travail.

Tous les 8 commentaires

Utilisez-vous la dernière version de roxygen2 ? Il devrait recréer le fichier NAMESPACE à partir de zéro à chaque fois.

Oui, j'utilise roxygen2 v3.0.0

sessionInfo()
R version 3.0.2 (2013-09-25)
Plate-forme : x86_64-apple-darwin10.8.0 (64 bits)

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

forfaits de base attachés :
[1] stats graphiques datasets grDevices utils méthodes base

autres packages joints :
[1] plyr_1.8 ...
extrafont_0.15
[25] roxygen2_3.0.0 testthat_0.7.1
[27] devtools_1.4.1

chargé via un espace de noms (et non attaché) :
[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] evaluation_0.5.1 extrafontdb_1.0 formatR_0.10 Formula_1.1-1 ggplot2_0.9.3.1
[16] gmp_0.5-11 grille_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 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] reshape2_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

Êtes-vous sûr de ne pas avoir un autre <strong i="5">@importFrom</strong> x y ailleurs ?

Rien d'évident, mais il semble que je dois avoir quelque chose qui persiste là où je ne m'y attends pas. je continuerai à chercher; désolé de déranger.

Je rouvre ce problème car j'ai pu créer un MWE qui produit une erreur associée à @importFrom (bien que je ne sois pas tout à fait sûr de mon message d'origine).

J'ai construit un package squelette avec des fichiers barebones et n'ai édité que le fichier help.R , ce qui est très simple :

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

Lorsque j'appelle document(package_directory, clean = TRUE) (où package_directory est une variable contenant le chemin d'accès au package), tout fonctionne correctement. Maintenant, je change help.R en :

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

et appelez document(package_directory, clean = TRUE) , ce qui provoque une erreur, comme prévu :

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

Maintenant, revenons en arrière et corrigeons le help.R pour qu'il revienne à l'original :

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

Lorsque j'appelle document(package_directory, clean = TRUE) , j'obtiens étonnamment toujours l'erreur que j'ai eue lorsque j'ai cassé help.R . J'aurais pensé que cela aurait bien fonctionné ici car document ignore le fichier NAMESPACE .

Une torsion supplémentaire est que si au lieu d'utiliser document après avoir cassé des choses, j'utilise roxygenize , cela fonctionne bien.

Selon la documentation roxygen , "Si vous avez un package simple, vous pouvez utiliser roxygenise() , mais pour tout ce qui est plus compliqué, je vous recommande d'utiliser document() ." Alors, pourquoi document ne fonctionne-t-il pas ici, mais roxygenize ? Et quand faut-il utiliser chacun ?

Pour les versions, je suis à jour :

> 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, le problème est que document() doit d'abord exécuter load_all() pour charger le package, et une fois que vous avez rompu l'espace de noms, il n'y a aucun moyen de le charger. Dans ce scénario, j'annule généralement le changement dans git.

supprimez le fichier d'espace de noms et faites load_all() puis faites devtools::documentement(). Il devrait faire le travail.

Cet ancien problème a été automatiquement verrouillé. Si vous pensez avoir trouvé un problème connexe, veuillez déposer un nouveau problème (avec reprex) et créer un lien vers ce problème. https://reprex.tidyverse.org/

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

pssguy picture pssguy  ·  5Commentaires

shirdekel picture shirdekel  ·  5Commentaires

asimumba picture asimumba  ·  6Commentaires

mkhezr picture mkhezr  ·  5Commentaires

Mullefa picture Mullefa  ·  6Commentaires