L’un des objectifs de nos packages open-source chez ThinkR est de faciliter nos flux de travail de développement. {attachment} et {fusen} sont développés et maintenus pour faciliter le développement et la maintenance des paquets. Inception… S’ils nous aident tous les jours, ils peuvent probablement vous aider aussi ! Dans cet article de blog, je vous présente les dernières modifications de ces deux packages.
Si vous voulez savoir comment ils fonctionnent pour votre vie de tous les jours, vous pouvez consulter les Readmes :
- {fusen}: https://thinkr-open.github.io/fusen/
- {attachment}: https://thinkr-open.github.io/attachment/
Installer depuis r-universe
Table des matières
Ces deux paquets sont disponibles sur CRAN.
Cependant, si vous souhaitez obtenir la dernière version, sans être contraint par GitHub (token nécessaire, certaines service IT bloquant GitHub, …), vous pouvez les installer en utilisant https://thinkr-open.r-universe.dev/ comme dépôt de sources.
# Enable repository from thinkr-open
options(repos = c(
thinkropen = 'https://thinkr-open.r-universe.dev',
CRAN = 'https://cloud.r-project.org'))
# Download and install attachment & fusen in R
install.packages('attachment')
install.packages('fusen')
La R-runiverse est une formidable plateforme lancée et développée par Jeroen Ooms pour ROpenSci.
La plateforme R-universe permet de rechercher et d’installer des paquets R provenant directement des développeurs, sans risque qu’ils soient supprimés sans le consentement de ces mêmes développeurs.
Vous avez directement accès à la documentation, ainsi qu’aux indicateurs de maintenance des paquets.
Rapides Nouveautés dans {fusen} v0.4.1
Nouvelles fonctionnalités
Voir ci-dessous une description plus longue
- Charger tous les “chunks” de
fonction
du fichier “flat” actuellement ouvert avecload_flat_functions()
(Comme unload_all()
pour un fichier plat) - Possibilité de
inflate()
un fichier plat Quarto “.qmd” (#160)
Minor
- Fix HTML5 doc
Rapides Nouveautés dans {attachment} v0.3.0
Nouvelles fonctionnalités
Voir ci-dessous une description plus longue
find_remotes()
etset_remotes_to_desc()
détectent maintenant les installations GitHub, GitLab, git, Bitbucket, locales à ajouter à la partie “Remotes :” du fichier DESCRIPTION (@MurielleDelmotte)- Les documents Quarto peuvent être traités avec
att_from_qmds()
comme un alias deatt_from_rmds()
.
Minor changes
- Mise à jour de la documentation pour bookdown et quarto sur l’extraction des dépendances
Bug fixes
- Permet d’utiliser les dépendances après
att_amend_desc()
#52 - Correction des problèmes HTML5 avec la mise à jour de {roxygen2}.
{fusen} – Puis-je charger toutes les fonctions du fichier “flat” actuel pendant le développement sans avoir à inflate()
?
Oui. Vous pouvez exécuter et charger uniquement les “chunk” function
dans le fichier plat actuellement ouvert avec load_flat_functions()
.
Avec un long fichier plat en cours de développement, et avant inflate()
, il est parfois difficile d’exécuter tous les chunks nécessaires après de multiples modifications. Cela peut aussi être utile lorsque vous recommencez votre développement le lendemain.
load_flat_functions()
est comme un load_all()
pour un fichier plat, bien qu’il ne tienne pas compte des dépendances.
Dans la console, exécutez :
fusen::load_flat_functions()
Vous pouvez également exécuter des “chunks” function
d’un fichier plat spécifique avec :
fusen::load_flat_functions(flat_file = "dev/flat_full.Rmd")
{fusen} – Puis-je gonfler un fichier Quarto qmd ?
Oui, c’est possible. Tant que ce que vous incluez dans votre fichier plat qmd est correct pour une vignette de package R, vous pouvez utiliser le format qmd.
Cela ne changera pas vraiment la sortie de quoi que ce soit puisque le fichier plat n’est pas destiné à être rendu.
La vignette créée à partir de ce fichier plat sera toujours un fichier Rmd.
Mais pourquoi pas ?
Vous pouvez donc ajouter un fichier plat et changer son extension en “.qmd” si ça vous dit.
{attachment} – Proposer du contenu pour le champ “Remotes” de votre DESCRIPTION
set_remotes_to_desc()
ajoute les paquets qui ont été installés depuis une autre source que le CRAN au champ Remotes:
de DESCRIPTION.
Par exemple :
- Pour GitHub :
Remotes: thinkr-open/attachment
- Pour GitLab :
Remotes: gitlab::jimhester/covr
- Pour Git :
Remotes: git::https://theurl/package_git.git
- Pour un package local :
Remotes: local::c:\mylocalpackage
ouRemotes: local::subdir/mylocalpackage
- Pour Bioconductor :
Remotes: bioc::3.3/package_bioc
Vous pourriez vouloir l’exécuter après att_amend_desc()
.
att_amend_desc() %>%
set_remotes_to_desc()
Si vous voulez seulement savoir si des paquets ont été installés à partir d’une autre source que CRAN, sans modifier DESCRIPTION, vous pouvez utiliser find_remotes()
.
Vous pouvez l’utiliser sur un vecteur de noms de packages
find_remotes(pkg = c("attachment", "desc", "glue"))
Vous pouvez également vouloir le combiner à att_from_description()
.
att_from_description() %>%
find_remotes()
{attachment} – Utiliser {attachment} avec {bookdown} / {pagedown} / {quarto} et les dépendances du code inclu
Les dépendances de votre Bookdown peuvent être automatiquement découvertes et installées si vous utilisez un fichier “DESCRIPTION” en combinaison avec {attachment}.
En effet, vous pouvez utiliser cette procédure pour créer le fichier DESCRIPTION pour une installation locale ou pour une intégration continue avec les pages GitLab ou les GitHub Actions.
Voir par exemple les flux de travail GitLab CI dans {gitlabr} : https://github.com/statnmap/gitlabr/tree/main/inst/gitlab-ci
- Créer un fichier “DESCRIPTION
usethis::use_description()
- Remplissez le fichier “DESCRIPTION” en utilisant
attachment::att_to_desc_from_is()
.
Notez que pour l’inclure directement dans CI (comme proposé dans les templates {gitlabr}), vous devrez peut-être définiratt_to_desc_from_is(must.exist = FALSE)
.
Notez queatt_from_rmds()
fonctionne également pour les documents “.qmd”. Vous pouvez utiliseratt_from_qmds()
si vous le souhaitez, bien que pour l’instant il n’y ait aucune différence et qu’il analysera également les documents “.Rmd”.
# bookdown Imports are in Rmds
imports <- c("bookdown", attachment::att_from_rmds("."))
attachment::att_to_desc_from_is(
path.d = "DESCRIPTION",
imports = imports, suggests = NULL,
must.exist = FALSE
)
- Installer les dépendances depuis le fichier DESCRIPTION
# install.packages("remotes")
remotes::install_deps()
- Construire votr {bookdown} / {pagedown} / {quarto}
{attachment} et {fusen} travaillent ensemble dans vos flux de travail
Une note rapide pour vous rappeler que {fusen} utilise {attachment} en arrière-plan.
Si vous réalisez un inflate()
de votre fichier plat, alors attachment::att_amend_desc()
sera aussi exécuté.
Comme il est lancé sans option, vous pouvez empêcher {attachment} d’être lancé avec :
fusen::inflate(document = FALSE)
# I would add this line after, to jump to your own version of attachment::att_amend_desc()
rstudioapi::navigateToFile("dev/0-dev_history.Rmd", line = 92)
Ensuite, dans votre “dev/0-dev_history.Rmd”, vous pouvez ajouter votre propre code spécifique.
Par exemple, dans {attachment} lui-même, dans “dev/dev_history.R”, vous pouvez trouver ceci :
attachment::att_amend_desc(
pkg_ignore = c("remotes", "i", "usethis", "rstudioapi", "renv",
"gitlab", "git", "local", "find.rscript", "bioc"), #i
extra.suggests = c("testthat", "rstudioapi", "renv", "lifecycle"), #"pkgdown", "covr",
dir.t = "",
normalize = FALSE)
Profitez de ces deux packages individuellement ou en les combinant !