[Résolu] vignette non publique

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

[Résolu] vignette non publique

Messagepar Pierre-Yves Berrard » 08 Oct 2018, 07:54

Bonjour,

Je suis en train de développer un package dans lequel j'aimerais incorporer une documentation destinée aux admin du package (par exemple sur la manière de mettre à jour un jeu de données). La solution naturelle serait de faire une vignette, mais j'aimerais que cette documentation soit moins "visible" qu'une vignette destinée à l'utilisateur.

Est-ce que je peux rendre la vignette moins facilement accessible, et sinon quelles solutions alternatives s'offrent à moi ?
PY

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: vignette non publique

Messagepar Mickael Canouil » 08 Oct 2018, 08:44

Bonjour,

il suffirait de "cacher" cette vignette dans un sous-dossier "./inst/" du package.
http://r-pkgs.had.co.nz/inst.html

Ensuite, le plus simple serait d'écrire une petite fonction qui ouvre la vignette par exemple.

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: vignette non publique

Messagepar Pierre-Yves Berrard » 08 Oct 2018, 09:05

Merci Mickael.

Si je crée un dossier "./inst", il ne sera pas pris en compte à la construction du package.
"inst/." plutôt ?
PY

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: vignette non publique

Messagepar Mickael Canouil » 08 Oct 2018, 09:25

Il faut créer un sous dossier dans inst "./inst/user_docs"
Mettre les fichiers à l'intérieur.
Par exemple: mypackage/inst/user_docs/myvignette.html
Lors de l'installation, vous aurez à la racine du package un dossier "user_docs" en plus des dossiers classiques.

Code : Tout sélectionner

system.file("user_docs", package = "mypackage")
Mickaël
mickael.canouil.fr | rlille.fr

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: vignette non publique

Messagepar Pierre-Yves Berrard » 08 Oct 2018, 09:30

D'accord (je n'avais pas percuté que le point faisait référence à la racine du package).

Et pour l'afficher ? Je ne peux manifestement pas utiliser vignette("myvignette") puisqu'elle n'est pas dans le dossier vignettes.
PY

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: vignette non publique

Messagepar Mickael Canouil » 08 Oct 2018, 09:49

Pour l'afficher, il faut définir une fonction qui peut être dérivée des fonctions déjà existantes comme "vignette()".
Par exemple, pour charger les alias du package parallel:

Code : Tout sélectionner

load_aliases <- function() {
  readRDS(file = system.file("help/aliases.rds", package = "parallel"))
}

x <- load_aliases()
Mickaël
mickael.canouil.fr | rlille.fr

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: vignette non publique

Messagepar Pierre-Yves Berrard » 08 Oct 2018, 13:12

En regardant le code source et l'aide de vignette() j'ai réussi à afficher une vignette déjà existante, en utilisant print().

Code : Tout sélectionner

dplyr_v3 <- as.list(tools::getVignetteInfo("dplyr")[3, c("Dir", "PDF")])
class(dplyr_v3) <- "vignette"

print(dplyr_v3)   ### affiche la vignette dans le viewer

Maintenant, j'essaie la même chose avec ma vignette déjà créée :

Code : Tout sélectionner

maVignette <-
  structure(
    list(Dir = "E:/packages-source", PDF = "maVignette.html"),
    class = "vignette"
  )

print(maVignette) ### n'affiche rien

Pourtant les objets dplyr_v3 et maVignette ont la même structure :

Code : Tout sélectionner

str(dplyr_v3)
#> List of 2
#>  $ Dir: chr "D:/Program_Files/R/packages_pyb/dplyr"
#>  $ PDF: chr "programming.html"
#>  - attr(*, "class")= chr "vignette"

str(maVignette)
#> List of 2
#> $ Dir: chr "E:/packages-source"
#> $ PDF: chr "maVignette.html"
#>- attr(*, "class")= chr "vignette"

J'ai aussi essayé sans succès de mettre le fichier html dans un répertoire "E:/packages-source/doc", comme c'est le cas pour les packages installés.

J'y verrais peut-être plus clair en ayant une idée de comment marche print.vignette() mais je n'arrive pas à accéder au code source de cette fonction...
PY

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: vignette non publique

Messagepar Mickael Canouil » 09 Oct 2018, 08:28

Bonjour,

attention à ne pas utiliser les répertoires créés automatiquement lors de la compilation du package.
Des meta-données sont générées, d'où l'utilisation d'un sous répertorie dans "inst".

pour le code source de la fonction print pour la classe (S3) vignette, il faut aller chercher plus loin dans "utils"

Code : Tout sélectionner

utils:::print.vignette
Mickaël
mickael.canouil.fr | rlille.fr

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: vignette non publique

Messagepar Pierre-Yves Berrard » 09 Oct 2018, 10:06

J'ai réussi à afficher la vignette dans le navigateur internet :

Code : Tout sélectionner

browseURL(
  file.path(system.file(package = "monpackage"), "admin/maVignette.html")
)

J'ai aussi essayé dans le viewer interne de R (code inspiré de utils:::print.vignette) :

Code : Tout sélectionner

port <- tools::startDynamicHelp(NA)
browseURL(
  sprintf("http://127.0.0.1:%d/library/monpackage/admin/maVignette.html", port)
)
Mais le viewer est sans appel :
Only help files, NEWS, DESCRIPTION and files under doc/ and demo/ in a package can be viewed

Si tu as une idée pour ce dernier point, Mickael, je suis preneur, mais ce serait juste pour peaufiner. Merci encore en tout cas.
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité