6
votes

Comment inclure une vignette HTML dans un package R binaire

J'ai écrit un package R à des fins internes et j'ai également ajouté des vignettes. Lorsque j'utilise devtools :: install (build_vignettes = TRUE) , toutes les vignettes sont correctement installées sur ma machine. Mais pour distribuer le paquet à des collègues, je voudrais générer un binaire Windows.

Mais lorsque j'utilise Build binary package depuis le volet RStudio Build, les vignettes n'apparaissent pas lorsque le package est installé à partir du binaire généré. J'ai pensé que je pourrais déplacer les vignettes de doc vers inst / doc avant de construire le paquet binaire, mais cela doit être fait manuellement chaque fois qu'une vignette change.

À partir de R CMD INSTALL --help , je n'ai pas pu comprendre s'il existe une option pour inclure la construction des vignettes.

Y a-t-il une meilleure option disponible que de copier manuellement les fichiers de doc à inst/doc?

J'ai déjà essayé devtools :: build_vignettes () . Voici le résultat de la console:

> devtools::build_vignettes()
Building archivR vignettes
Moving vig1.html, vig2.html, vig1.R, vig2.R to doc/
Copying vig1.Rmd, vig2.Rmd to doc/
Building vignette index

Il indique que les fichiers sont copiés dans doc / . Ils n'apparaissent pas dans inst/doc.


3 commentaires

Si vous utilisez devtools :: build_vignettes , les vignettes vont dans le dossier inst / doc .


Cela ne fonctionne pas. S'il vous plaît voir ma modification ...


aux prises avec le même problème pour le binaire mac. serait-ce un bug?


3 Réponses :


2
votes

J'ai également eu du mal avec la même question.

  • Auparavant, devtools :: build_vignettes () mettait les résultats dans inst / doc (par exemple, comme recommandé dans la dernière puce ici ).
  • Depuis la version 2.0.0 (publiée en octobre 2018), devtools :: build_vignettes () place désormais les résultats dans doc (le changement spécifique semble être ici ). Les raisons de ce changement sont données dans les enjeux liés à ce commit.

Je ne trouve pas de moyen d'accomplir le flux de travail précédent en utilisant uniquement devtools , j'ai donc utilisé le code suivant. Il écrasera tous les fichiers qui se trouvent déjà dans inst / doc ou inst/Meta.

build_vignettes_to_inst <- function() {
  devtools::build_vignettes() # Builds vignettes to 'doc' and 'Meta'. Updates '.gitignore'.
  unlink(c("inst/doc", "inst/Meta"), recursive = TRUE) # Remove the directories if they exist
  dir.create("inst/doc"); dir.create("inst/Meta") # Create empty directories
  has_worked <- c( # Copy files to 'inst' subfolders
    file.copy(list.files("doc", full.names = TRUE), to = "inst/doc") 
    , file.copy(list.files("Meta", full.names = TRUE), to = "inst/Meta")
  )
  unlink(c("doc", "Meta"), recursive = TRUE) # Optional: Remove unwanted directories
  return(all(has_worked)) # Returns TRUE if everything worked OK
}

build_vignettes_to_inst() # Call the function

Vous pouvez maintenant appeler devtools :: build () avec binary = TRUE , et il inclura les vignettes construites (c'est-à-dire HTML).


3 commentaires

@tshimkus Oui, cette solution a fonctionné pour moi, en utilisant le code ci-dessus.


Merci de partager votre approche. Cependant, cela semble assez compliqué par rapport à robocopy doc inst / doc que je tape dans le terminal Windows de RStudio. Puisque vous n'en avez besoin que pour générer le package binaire.


Bon point. Ma réponse utilise la fonctionnalité de base R pour éviter d'avoir à copier manuellement les fichiers.



3
votes

Si vous utilisez

devtools::build()
devtools::build("../package_name.tar.gz", binary=TRUE)

alors les vignettes seront intégrées dans le fichier tar.gz, d'abord puis dans le binaire.

Pas besoin de déplacer de fichiers à propos de


3 commentaires

Pourriez-vous ajouter plus de détails @der_grund? J'utilise Windows btw. Pour être plus clair, "../package_name.tar.gz" doit être modifié pour correspondre au fichier qui a été créé par devtools :: build ()


J'ai rencontré ce même problème et surpris qu'il ne soit pas mieux traité dans les matériaux de RStudio. J'ai trouvé que c'était le moyen le plus simple, au moment de la rédaction de ce commentaire


Ce qui précède peut être combiné comme tel: devtools :: build (devtools :: build (), binary = TRUE)



2
votes

Juste pour référence:

Le moyen le plus robuste est de construire un paquet source (fichier .tar.gz) puis d'utiliser les outils de commande au lieu de RStudio pour construire le binaire. Si vous êtes dans le répertoire où se trouve le paquet source, vous pouvez utiliser la commande suivante sur la ligne de commande (à condition que R soit dans votre PATH):

R CMD INSTALL --build pkgname_x.y.z.tar.gz

avec pkgname_x.yztar.gz le nom du fichier tar contenant le paquet source.

Notez que vous devez d'abord créer le paquet source et construire à partir du paquet source si vous voulez faire ajouter les vignettes correctement.


1 commentaires

Cela marche. Juste une remarque: pour que cette commande fonctionne sous Windows, le dossier bin de RTools doit être inclus dans la variable d'environnement PATH.