## Installation de 'remotes' ----
install.packages("remotes")
## Installation de 'rcompendium' ----
::install_github("frbcesab/rcompendium")
remotes
## Chargement du package -----
library("rcompendium")
Research compendium
L’objectif de cet exercice est de créer un research compendium, c.-à-d. un dossier de travail dont la structure est dérivée de celle d’un package . Vous allez découvrir les fichiers importants que nous vous recommandons d’ajouter à un projet de recherche. Vous allez aussi apprendre à écrire et documenter des fonctions .
Ce research compendium servira de base de travail tout au long de la formation.
NB. Cet exercice s’inspire du workshop proposé par Anna Krystalli.
Préambule
Afin de nous assister dans la création de la structure de notre dossier de travail, nous allons utiliser le package rcompendium
, développé dans le cadre de cette formation. Il permet d’automatiser la création des fichiers/répertoires spécifiques à un compendium/package .
Installez le package rcompendium
depuis GitHub :
Si vous rencontrez des difficultés à installer le package, lisez attentivement la section Installation du README.
Une fois le package installé, vous devez exécuter la fonction set_credentials()
afin de stocker localement vos informations personnelles (prénom, nom, email, ORCID, protocole de communication avec GitHub). Ces informations permettront de remplir automatiquement certains fichiers du compendium. Cette fonction n’est à utiliser qu’une seule fois.
## Stockage de vos informations ----
set_credentials(given = "Jane",
family = "Doe",
email = "jane.doe@mail.me",
orcid = "0000-0000-0000-0000",
protocol = "ssh")
Ces informations ont été copiées dans le presse-papier. Collez son contenu dans le fichier ~/.Rprofile (ouvert dans RStudio par cette fonction). Ce fichier est lu à chaque ouverture de et son contenu sera accessible aux fonctions du package rcompendium
.
Redémarrez la session (Session > Restart R) et vérifiez que vos informations personnelles sont bien accessibles.
## Vérification (après redémarrage de R) ----
getOption("email")
# [1] "jane.doe@mail.me"
getOption("family")
# [1] "Doe"
Projet RStudio
Lorsque vous démarrez un nouveau projet sous , il est vivement conseillé d’utiliser les Projets RStudio.
Créez un nouveau Projet RStudio : File > New Project > New Directory > New Project
- Choisissez un nom pour votre projet (sans signe de ponctuation), par ex.
practice
- Sélectionnez l’emplacement où le nouveau projet sera créé
- Décochez toutes les autres cases
- Validez
Toujours travailler dans un Projet RStudio. Cela présente l’avantage de simplifier les chemins d’accès aux fichiers, notamment avec le package here
et sa fonction here()
. Les chemins d’accès seront toujours construits par rapport au dossier contenant le fichier .Rproj (racine du projet). On parle de chemin relatif. N’utilisez plus jamais la fonction setwd()
.
Structure du compendium
practice/ # Root of the compendium | └─ practice.Rproj # RStudio project file
Fichier README
Tout projet se doit de contenir un fichier README. C’est la vitrine du projet. Les rôles d’un README sont multiples :
- présenter le projet
- expliquer son contenu
- expliquer comment l’installer
- expliquer comment l’utiliser
C’est un simple fichier texte (plain text-based file) qui peut être écrit au format texte (README.txt
), en Markdown (README.md
), en R Markdown (README.Rmd
), en Quarto (README.qmd
), etc.
Ici, vous allez créer un README.md
(fichier texte écrit en Markdown) à la racine de votre projet.
Utilisez la fonction utils::file.edit()
qui permet d’ouvrir un fichier dans l’éditeur de RStudio. Si ce fichier n’existe pas, elle va aussi le créer.
## Ajout d'un README ----
::file.edit(here::here("README.md")) utils
Exécutez cette ligne de code dans la console : here::here("README.md")
et essayez de comprendre ce que fait la fonction here::here()
. Comparez avec votre voisin.e.
Editez ce README.md
en ajoutant les informations pertinentes.
Proposition de README
Code
# Practice
This project contains files to create a simple **research compendium** as
presented in the training course
[Reproducible Research in Computational Ecology](https://rdatatoolbox.github.io).
## Content
This project is structured as follow:
- `README.md`: presentation of the project
- `compendium.Rproj`: RStudio project file
## Installation
Coming soon...
## Usage
Coming soon...
## Citation
> Doe J (2024) Minimal structure of a research compendium.
Ajoutez un README à votre projet afin d’aider l’utilisateur à comprendre votre projet. Si vous souhaitez exécuter du code à l’intérieur, écrivez-le en R Markdown (README.Rmd
) ou Quarto (README.qmd
), sinon utilisez simplement du Markdown (README.md
).
NB. Si vous écrivez un .Rmd
ou un .qmd
, n’oubliez pas de le transpiler en .md
. GitHub n’est capable d’interpréter que les .md
.
## Conversion d'un Rmd en un md ----
::render("README.Rmd")
rmarkdown
## Conversion d'un qmd en un md ----
::quarto_render("README.qmd") quarto
Vous pouvez aussi cliquer sur le bouton Render de RStudio.
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | └─ README.md # Presentation of the project
Fichier DESCRIPTION
Le fichier DESCRIPTION décrit les métadonnées du projet (titre, auteur, description, dépendances requises, etc.). C’est un des éléments essentiels d’un package . Ici, nous allons le détourner pour l’utiliser dans le cadre d’un compendium afin de bénéficier des outils de développement de packages (voir plus loin).
Ajoutez un fichier DESCRIPTION avec la fonction add_description()
de rcompendium
.
## Ajout d'un fichier DESCRIPTION ----
add_description()
Package: practice
Type: Package
Title: The Title of the Project
Version: 0.0.0.9000
Authors@R: c(
person(given = "Jane",
family = "Doe",
role = c("aut", "cre", "cph"),
email = "jane.doe@mail.me",
comment = c(ORCID = "0000-0000-0000-0000")))
Description: A paragraph providing a full description of the project (on
several lines...)
License: {{license}} Encoding: UTF-8
Comme vous le voyez, le fichier DESCRIPTION a été pré-rempli avec vos informations personnelles. Vous éditerez les champs Title et Description plus loin.
Toujours ajouter un fichier DESCRIPTION à la racine du projet. Il permet de décrire les métadonnées du projet : titre, auteur(s), description, licence, etc. Nous le verrons plus loin, mais c’est aussi l’endroit idéal pour lister les packages externes requis.
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | ├─ README.md # Presentation of the project └─ DESCRIPTION # Project metadata
Choix d’une Licence
Tout matériel partagé en ligne doit disposer d’une licence qui décrit ce qu’il est possible de faire avec. Ainsi, nous vous recommandons d’ajouter dès le début du projet une licence. Pour savoir quelle licence est la plus appropriée à votre projet, vous pouvez vous rendre sur ce site : https://choosealicense.com.
Ajoutez la licence GPL-2 à votre projet à l’aide de la fonction add_license()
de rcompendium
.
## Ajout d'une licence ----
add_license(license = "GPL-2")
Notez qu’un nouveau fichier a été créé : LICENSE.md. Celui-ci détaille le contenu de la license choisie et sera lu par GitHub. Regardez aussi le contenu du fichier DESCRIPTION : la section License a été mise à jour grâce à rcompendium
.
Ajoutez une section au README.md mentionnant la licence.
Proposition de README
Code
# Practice
This project contains files to create a simple **research compendium** as
presented in the training course
[Reproducible Research in Computational Ecology](https://rdatatoolbox.github.io).
## Content
This project is structured as follow:
- `README.md`: presentation of the project
- `compendium.Rproj`: RStudio project file
## Installation
Coming soon...
## Usage
Coming soon...
## License
This project is released under the
[GPL-2 license](https://choosealicense.com/licenses/gpl-2.0/).
## Citation
> Doe J (2024) Minimal structure of a research compendium.
Toujours ajouter une LICENCE à un projet qui sera rendu public. Visitez le site Choose a License pour choisir la plus appropriée à votre projet.
NB. Si aucune licence n’est renseignée, votre projet sera soumis aux règles de la No License : aucune permission n’est accordée. En d’autres termes, personne ne peut rien faire avec votre projet (pas d’utilisation, pas de modification, pas de partage, etc.).
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | ├─ README.md # Presentation of the project ├─ DESCRIPTION # Project metadata └─ LICENSE.md # License of the project
Sous-répertoires
La prochaine étape consiste en la création de sous-répertoires, chacun ayant un rôle précis. L’idée ici est de séparer les données, les résultats et le code.
Pour cela, utilisez la fonction add_compendium()
de rcompendium
.
## Ajout de sous-répertoires ----
add_compendium(compendium = c("data", "analyses", "R", "figures", "outputs"))
Un bon Research compendium sera composé de différents sous-répertoires, chacun destiné à accueillir un certain type de fichiers. Par ex.,
- le dossier data/ contiendra toutes les données brutes nécessaires au projet
- le dossier outputs/ contiendra tous les résultats générés (hors figures)
- le dossier figures/ contiendra toutes les figures produites par les analyses
- le dossier R/ ne contiendra que des fonctions (et leurs documentations). Voir plus loin
- le dossier analyses/ contiendra des scripts (ou des fichiers
.Rmd
et/ou.qmd
) qui appeleront les fonctions
NB. Cette structure peut bien sûr être adaptée selon les besoins, les pratiques de chacun et la complexité du projet. A l’exception du dossier R/, tous les autres répertoires peuvent être nommés différemment.
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | ├─ README.md # Presentation of the project ├─ DESCRIPTION # Project metadata ├─ LICENSE.md # License of the project | ├─ data/ # Contains raw data ├─ outputs/ # Contains results ├─ figures/ # Contains figures ├─ R/ # Contains R functions (only) └─ analyses/ # Contains R scripts
Code
Nous voilà fin prêt à coder !
Le dépôt GitHub https://github.com/rdatatoolbox/datarepo contient les données que nous utiliserons tout au long de la formation. Celles-ci proviennent de deux bases de données : PanTHERIA et WWF WildFinder. Lisez attentivement le README pour plus de détails.
L’objectif ici est d’écrire un code qui va télécharger les quatre fichiers hébergés sur le dépôt GitHub mentionné ci-dessus.
Nous allons commencer par écrire notre code dans un script. Le fichier de données PanTHERIA, disponible ici, sera enregistré dans le sous-répertoire data/pantheria/ et les trois fichiers de données WWF WildFinder, disponibles ici, seront enregistrés dans le sous-répertoire data/wildfinder/.
Créez, dans le dossier analyses/, le script download-data.R
à l’aide de la fonction utils::file.edit()
.
## Ajout d'un script R ----
::file.edit(here::here("analyses", "download-data.R")) utils
Utilisez les fonctions dir.create()
pour créer des sous-répertoires, here::here()
pour construire vos chemins et utils::download.file()
pour télécharger les fichiers.
Proposition de code pour PanTHERIA (essayez de ne pas regarder)
Code
## Destination path ----
<- here::here("data", "pantheria")
path
## Create destination directory ----
dir.create(path, showWarnings = FALSE, recursive = TRUE)
## File name ----
<- "PanTHERIA_1-0_WR05_Aug2008.txt"
filename
## GitHub base URL ----
<- "https://raw.githubusercontent.com/rdatatoolbox/datarepo/main/data/pantheria/"
base_url
## Build full URL ----
<- paste0(base_url, filename)
full_url
## Build full path ----
<- file.path(path, filename)
dest_file
## Download file ----
::download.file(url = full_url,
utilsdestfile = dest_file,
mode = "wb")
Essayez de scripter l’intégralité du travail. Ici, nous avons vu comment créer des fichiers (utils::file.edit()
) et des répertoires (dir.create()
), construire des chemins relatifs robustes (here::here()
) et télécharger des fichiers (utils::download.file()
) directement à partir de .
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | ├─ README.md # Presentation of the project ├─ DESCRIPTION # Project metadata ├─ LICENSE.md # License of the project | ├─ data/ # Contains raw data | ├─ pantheria/ # PanTHERIA database | | └─ PanTHERIA_1-0_WR05_Aug2008.txt | └─ wildfinder/ # WWF WildFinder database | ├─ wildfinder-ecoregions_list.csv | ├─ wildfinder-ecoregions_species.csv | └─ wildfinder-mammals_list.csv | ├─ outputs/ # Contains results ├─ figures/ # Contains figures ├─ R/ # Contains R functions (only) | └─ analyses/ # Contains R scripts └─ download-data.R # Script to download raw data
Pour utiliser une fonction d’un package externe, vous avez appris à utiliser library("package")
. Sous , il existe une autre syntaxe pour appeler une fonction d’un package externe : package::function()
. Alors que library()
charge et attache un package (rendant ses fonctions accessible directement avec function()
), la syntaxe package::function()
charge uniquement un package dans l’environnement de , mais n’attache pas son contenu. Ainsi, on est obligé de spécifier le nom du package en appelant la fonction.
Nous vous recommendons d’utiliser la syntaxe package::function()
. Et ce pour deux raisons :
- meilleure lisibilité du code : en un coup d’oeil, on sait dans quel package se trouve la fonction
- limitation de conflits entre packages : deux fonctions peuvent avoir le même nom dans deux packages différentes. Par ex., le package
dplyr
propose une fonctionfilter()
qui se trouve également dans le packagestats
(attaché à l’ouverture de ). Mais, les fonctionsfilter()
de ces deux packages ne font pas la même chose.
library("dplyr")
## Attaching package: ‘dplyr’
##
## The following objects are masked from ‘package:stats’:
##
## filter, lag
##
## The following objects are masked from ‘package:base’:
##
## intersect, setdiff, setequal, union
Si vous utilisez library("dplyr")
, vous ne serez jamais sûr à 100% d’utiliser la fonction filter()
du package dplyr
ou celle du package stats
.
Cependant, pour des packages très verbeux (tels que ggplot2
), vous pouvez utiliser la fonction library()
, sinon votre code deviendra très vite fastidieux à écrire.
Si vous souhaitez utiliser le pipe %>%
, attachez le package magrittr
avec library("magrittr")
.
Factorisation
On peut aller plus loin en découpant ce script en fonctions : on parle de factorisation de code. Une fonction est un ensemble de lignes de code regroupées en un seul bloc destiné à réaliser une tâche précise. Ecrire des fonctions rendra votre code plus clair et plus facilement réutilisable entre projets.
Placez toujours vos fonctions dans un dossier nommé R/.
Factorisez le script précédent en deux fonctions :
- une fonction
dl_pantheria_data()
pour télécharger les données PanTHERIA, et - une fonction
dl_wildfinder_data()
pour télécharger les données WWF WildFinder.
Utilisez la fonction usethis::use_r()
pour créer deux fichiers .R
dans le dossier R/.
## Création du fichier pour la 1ere fonction ----
::use_r("dl_pantheria_data") usethis
Proposition de fonction (essayer de ne pas regarder)
Code
<- function() {
dl_pantheria_data
## Destination path ----
<- here::here("data", "pantheria")
path
## Create destination directory ----
dir.create(path, showWarnings = FALSE, recursive = TRUE)
## File name ----
<- "PanTHERIA_1-0_WR05_Aug2008.txt"
filename
## GitHub base URL ----
<- "https://raw.githubusercontent.com/rdatatoolbox/datarepo/main/data/pantheria/"
url
## Build full URL ----
<- paste0(base_url, filename)
full_url
## Build full path ----
<- file.path(path, filename)
dest_file
## Download file ----
::download.file(url = full_url,
utilsdestfile = dest_file,
mode = "wb")
return(dest_file)
}
Ecrivez des fonctions : on parle de Factorisation de code. Cela rendra votre code plus clair et plus facilement réutilisable. Placez toujours vos fonctions dans le dossier R/. Si vous utilisez des fonctions de dépendances externes, priviligiez cette écriture : package::fonction()
.
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | ├─ README.md # Presentation of the project ├─ DESCRIPTION # Project metadata ├─ LICENSE.md # License of the project | ├─ data/ # Contains raw data | ├─ pantheria/ # PanTHERIA database | | └─ PanTHERIA_1-0_WR05_Aug2008.txt | └─ wildfinder/ # WWF WildFinder database | ├─ wildfinder-ecoregions_list.csv | ├─ wildfinder-ecoregions_species.csv | └─ wildfinder-mammals_list.csv | ├─ outputs/ # Contains results ├─ figures/ # Contains figures ├─ R/ # Contains R functions (only) | ├─ dl_pantheria_data.R # Function to download PanTHERIA data | └─ dl_wildfinder_data.R # Function to download WildFinder data | └─ analyses/ # Contains R scripts └─ download-data.R # Script to download raw data
Documentation
Il est temps de documenter vos fonctions. C’est essentiel ! Pour cela, nous allons utiliser la syntaxe roxygen2. Celle-ci permet de documenter facilement les fonctions en plaçant un entête roxygen2 avant chaque fonction. Cet entête doit contenir (a minima) un titre, une description de chaque argument et le retour de la fonction.
Ajoutez un entête roxygen2 à vos deux fonctions pour les documenter.
Proposition de documentation (essayer de ne pas regarder)
Code
#' Download PanTHERIA dataset
#'
#' @description
#' This function downloads the PanTHERIA dataset (text file) hosted on the
#' GitHub repository <https://github.com/rdatatoolbox/datarepo/>.
#' The file `PanTHERIA_1-0_WR05_Aug2008.txt` will be stored in
#' `data/pantheria/`. This folder will be created if required.
#'
#' @return This function returns the path (`character`) to the downloaded file
#' (e.g. `data/pantheria/PanTHERIA_1-0_WR05_Aug2008.txt`).
#'
#' @export
<- function() { ... } dl_pantheria_data
Pensez aux autres (et au vous du futur) : documentez toujours votre code. Un code sans documentation est inutile. Utilisez les entêtes roxygen2 pour documenter vos fonctions , de simples commentaires pour documenter du code et des README
pour tout le reste.
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | ├─ README.md # Presentation of the project ├─ DESCRIPTION # Project metadata ├─ LICENSE.md # License of the project | ├─ data/ # Contains raw data | ├─ pantheria/ # PanTHERIA database | | └─ PanTHERIA_1-0_WR05_Aug2008.txt | └─ wildfinder/ # WWF WildFinder database | ├─ wildfinder-ecoregions_list.csv | ├─ wildfinder-ecoregions_species.csv | └─ wildfinder-mammals_list.csv | ├─ outputs/ # Contains results ├─ figures/ # Contains figures ├─ R/ # Contains R functions (only) | ├─ dl_pantheria_data.R # Function to download PanTHERIA data | └─ dl_wildfinder_data.R # Function to download WildFinder data | └─ analyses/ # Contains R scripts └─ download-data.R # Script to download raw data
Vous pouvez transpiler vos entêtes roxygen2 en fichiers .Rd
, seuls fichiers acceptés par pour documenter des fonctions. Ces fichiers .Rd
seront stockés dans le dossier man/.
## Génération de la doc ----
::document() devtools
L’aide de votre fonction sera accessible via ?nom_fonction
.
Appel aux fonctions
Jusqu’à présent, nous n’avons fait que définir (et documenter) des fonctions , mais nous ne les avons pas exécuté.
Adaptez le contenu du script analyses/download-data.R créé précédemment afin qu’il appelle les fonctions dl_pantheria_data()
et dl_wildfinder_data()
.
## Ouverture du script précédent ----
::file.edit(here::here("analyses", "download-data.R")) utils
Proposition de contenu (essayer de ne pas regarder)
Code
# Download project raw data
#
# This script will download the PanTHERIA and WWF WildFinder datasets. The
# four files will be stored in `data/`.
#
# All functions used in the script have been developed for this project
# and can be found in the folder R/.
#
# Jane Doe <jane.doe@mail.me>
## Download PanTHERIA database ----
<- dl_pantheria_data()
pantheria_path
## Download WWF WildFinder database ----
<- dl_wildfinder_data() wildfinder_path
Le dossier analyses/ contient les scripts qui appellent les fonctions stockées dans le dossier R/. Dans le cas d’analyses complexes, n’hésitez pas à multiplier les scripts (plutôt que d’avoir un seul gros script).
Ajout des dépendances
Nos fonctions contiennent des dépendances à deux packages externes : utils
et here
. Comme dit précédemment, le fichier DESCRIPTION est l’endroit idéal pour centraliser la liste des packages requis.
Ajoutez ces deux dépendances au fichier DESCRIPTION avec la fonction usethis::use_package()
.
## Ajout des dépendances dans DESCRIPTION ----
::use_package(package = "here")
usethis::use_package(package = "utils") usethis
Regardez le contenu du fichier DESCRIPTION : les deux packages requis sont listés dans la section Imports.
Package: practice
Type: Package
Title: The Title of the Project
Version: 0.0.0.9000
Authors@R: c(
person(given = "Jane",
family = "Doe",
role = c("aut", "cre", "cph"),
email = "jane.doe@mail.me",
comment = c(ORCID = "0000-0000-0000-0000")))
Description: A paragraph providing a full description of the project (on
several lines...)
License: GPL-2
Encoding: UTF-8
Imports:
here, utils
Listez toujours les packages requis dans le fichier DESCRIPTION. Ainsi, vous centralisez la liste des packages requis en un seul endroit et vous pourrez utiliser les fonctions devtools::install_deps()
et devtools::load_all()
(voir la section Chargement du projet).
Si, dans votre code , vous souhaitez attacher vos packages avec library()
, utilisez la fonction usethis::use_package()
comme suit :
## Ajout d'une dépendance forte ----
::use_package(package = "ggplot2", type = "Depends") usethis
Le package sera ajouté dans la section Depends du fichier DESCRIPTION.
Chargement du projet
Maintenant que notre compendium contient un fichier DESCRIPTION avec une liste de packages, nous pouvons utiliser les outils de développement des packages disponibles dans le package devtools
pour :
1) Installer les packages avec la fonction devtools::install_deps()
Cette fonction va lire le fichier DESCRIPTION pour récupérer la liste des packages requis dans les sections Depends et Imports et les installer (uniquement s’ils ne sont pas déjà installés). Cette fonction vient donc remplacer la fonction install.packages()
.
Par défaut, cette fonction va aussi vous demander de mettre à jour les packages (si une nouvelle version est disponible). Si vous souhaitez désactiver cette fonctionnalité, ajoutez l’argument upgrade = "never"
.
2) Charger les packages avec la fonction devtools::load_all()
Cette fonction va aussi lire le fichier DESCRIPTION pour récupérer la liste des packages requis dans les sections Depends et Imports. Elle va charger les packages listés dans la section Imports et charger et attacher les packages listés dans la section Depends. Cette fonction vient donc remplacer la fonction library()
.
Mettez régulièrement à jour votre fichier DESCRIPTION en :
- ajoutant les nouveaux packages que vous utilisez
- retirant les packages que vous n’utilisez plus
3) Charger les fonctions avec la fonction devtools::load_all()
La fonction devtools::load_all()
présente un second avantage : elle va charger les fonctions stockées dans le dossier R/ et les rendre accessibles dans la session. Elle vient donc remplacer la fonction source()
.
Après chaque modification d’une fonction , n’oubliez pas d’exécuter la fonction devtools::load_all()
. Vous pouvez utiliser le raccourci clavier Ctrl + Shift + L
dans RStudio.
Essayez ces deux fonctions.
## Installation des packages manquants ----
::install_deps(upgrade = "never")
devtools
## Chargement des packages et des fonctions R ----
::load_all() devtools
Avec un fichier DESCRIPTION (listant les dépendances requises) et un dossier R/, vous pouvez utiliser :
devtools::install_deps()
pour installer (et mettre à jour) les packages : n’utilisez plusinstall.packages()
devtools::load_all()
pour 1) charger (et attacher) les packages et 2) charger vos fonctions : n’utilisez pluslibrary()
nisource()
(pour charger vos fonctions).
Ajout d’un make.R
Afin d’automatiser notre projet, nous allons créer un script à la racine du projet. Nous l’appelerons, par convention, make.R. Celui-ci aura deux objectifs :
- mettre en place le projet en installant et chargeant les packages (et les fonctions)
- exécuter le projet en sourçant les scripts de manière séquentielle
L’idée est, qu’une fois le projet fini, l’utilisateur n’exécute que ce script : c’est le chef d’orchestre du projet.
Utilisez la fonction utils::file.edit()
pour créer un script à la racine du projet.
## Ajout d'un makefile ----
::file.edit(here::here("make.R")) utils
Ajoutez-y les deux fonctions précédentes :
# Setup project ----
## Install packages ----
::install_deps(upgrade = "never")
devtools
## Load packages & functions ----
::load_all() devtools
Finalement, ajoutez une ligne dans le fichier make.R qui permettra d’exécuter le script analyses/download-data.R.
Utilisez les fonctions source()
et here::here()
pour cela.
Proposition de make.R (essayer de ne pas regarder)
Code
# Project title
#
# Project description
# ...
#
# Author: Jane Doe
# Date: 2024/12/02
# Setup project ----
## Install packages ----
::install_deps(upgrade = "never")
devtools
## Load packages & functions ----
::load_all()
devtools
# Run project ----
## Download raw data ----
source(here::here("analyses", "download-data.R"))
Un fichier make.R placé à la racine du projet permet de facilement mettre en place le projet (installation et chargement des packages requis et des fonctions ) et d’exécuter les différentes analyses de manière séquentielle (en sourçant les scripts qui appellent eux-même les fonctions ). C’est le chef d’orchestre du projet.
NB. Vu la simplicité de ce projet, nous aurions très bien pu placer le contenu du script analyses/download-data.R) dans ce make.R. La structure d’un compendium n’est pas figée, mais nous vous recommandons d’utiliser a minima des fonctions et un make.R.
Structure du compendium
practice/ # Root of the compendium | ├─ practice.Rproj # RStudio project file | ├─ README.md # Presentation of the project ├─ DESCRIPTION # Project metadata ├─ LICENSE.md # License of the project | ├─ data/ # Contains raw data | ├─ pantheria/ # PanTHERIA database | | └─ PanTHERIA_1-0_WR05_Aug2008.txt | └─ wildfinder/ # WWF WildFinder database | ├─ wildfinder-ecoregions_list.csv | ├─ wildfinder-ecoregions_species.csv | └─ wildfinder-mammals_list.csv | ├─ outputs/ # Contains results ├─ figures/ # Contains figures ├─ R/ # Contains R functions (only) | ├─ dl_pantheria_data.R # Function to download PanTHERIA data | └─ dl_wildfinder_data.R # Function to download WildFinder data | ├─ analyses/ # Contains R scripts | └─ download-data.R # Script to download raw data | └─ make.R # Script to setup & run the project
Pour finir
N’oubliez pas de finaliser la documentation de votre projet.
Editez les sections Title et Description du fichier DESCRIPTION.
Proposition de DESCRIPTION
Code
Package: practice
Type: Package
Title: Download PanTHERIA and WWF WildFinder databases
Version: 0.0.0.9000
Authors@R: c(
person(given = "Jane",
family = "Doe",
role = c("aut", "cre", "cph"),
email = "jane.doe@mail.me",
comment = c(ORCID = "0000-0000-0000-0000")))
Description: This project aims to download PanTHERIA and WWF WildFinder
databases. It is structured as a research compendium to be reproducible.
This is the result of the Practice 1 of the training course Reproducible
Research in Computational Ecology available at:
<https://rdatatoolbox.github.io/chapters/ex-compendium.html>.
License: GPL-2
Encoding: UTF-8
Imports:
here, utils
Editez le README.
Proposition de README
Code
# Practice
This project aims to download the [PanTHERIA](https://doi.org/10.1890/08-1494.1)
database (Kate _et al._, 2009) and the
[WWF WildFinder](https://www.worldwildlife.org/pages/wildfinder-database)
database (World Wildlife Fund 2006). It is structured as a research compendium
to be reproducible.
**NB.** This is the result of the Practice 1 of the training course
[Reproducible Research in Computational Ecology](https://rdatatoolbox.github.io).
## Content
This project is structured as follow:
.
├─ practice.Rproj # RStudio project file
|
├─ README.md # Presentation of the project
├─ DESCRIPTION # Project metadata
├─ LICENSE.md # License of the project
|
├─ data/ # Contains raw data
| ├─ pantheria/ # PanTHERIA database
| | └─ PanTHERIA_1-0_WR05_Aug2008.txt
| └─ wildfinder/ # WWF WildFinder database
| ├─ wildfinder-ecoregions_list.csv
| ├─ wildfinder-ecoregions_species.csv
| └─ wildfinder-mammals_list.csv
|
├─ outputs/ # Contains results
├─ figures/ # Contains figures
├─ R/ # Contains R functions (only)
| ├─ dl_pantheria_data.R # Function to download PanTHERIA data
| └─ dl_wildfinder_data.R # Function to download WildFinder data
|
├─ analyses/ # Contains R scripts
| └─ download-data.R # Script to download raw data
|
└─ make.R # Script to setup & run the project
## Installation
Coming soon...
## Usage
Open the `practice.Rproj` file in RStudio and run `source("make.R")` to launch
analyses.
- All packages will be automatically installed and loaded
- Datasets will be saved in the `data/` directory
## License
This project is released under the
[GPL-2](https://choosealicense.com/licenses/gpl-2.0/) license.
## Citation
> Doe J (2024) Download PanTHERIA and WWF WildFinder databases.
## References
Kate EJ, Bielby J, Cardillo M _et al._ (2009) PanTHERIA: A
species-level database of life history, ecology, and geography of extant and
recently extinct mammals. _Ecology_, 90, 2648.
DOI: [10.1890/08-1494.1](https://doi.org/10.1890/08-1494.1)
World Wildlife Fund (2006) WildFinder: Online database of species distributions. Version Jan-06. URL: https://www.worldwildlife.org/pages/wildfinder-database
Félicitation
Votre projet est devenu un véritable research compendium fonctionnel et reproductible.
The final compendium can be found here.
new_compendium()
L’ensemble de ces étapes peut être réalisé avec une seule fonction : new_compendium()
de rcompendium
. Lisez attentivement la documentation avant d’utiliser cette fonction.