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!
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/
Commentaire le plus utile
supprimez le fichier d'espace de noms et faites load_all() puis faites devtools::documentement(). Il devrait faire le travail.