filtered = transpose(data).filter(function(penguin) {
return bill_length_min < penguin.bill_length_mm &&
islands.includes(penguin.island);
})
Journées du PEPI IBIS 2023
September 15, 2023
Expliquer pour justifier et comprendre
Refaire pour vérifier, corriger et réutiliser
git
)OL
★ : Open LicenseRE
★ : machine REadableOF
★ : Open FormatURI
★ : Uniform Resource IdentifierLD
★ : Linked DataCa tombe bien, c’est la suite de l’exposé !
While preparing a manuscript, to our surprise, attempts by team members to replicate these results produced different calculated NMR chemical shifts despite using the same Gaussian files and the same procedure outlined by Willoughby et al. […] these conclusions were based on chemical shifts that appeared to depend on the computer system on which step 15 of that protocol was performed.
Bhandari Neupane et al. (2019)
Si un script ne fonctionne que sur l’ordi où il a été développé, il mourra avec cet ordi
Chez moi ça marche.
renv
renv
permet une gestion fine des versions des packages au sein de chaque projetrenv.lock
renv
- workflowInitialisation d’un nouvel environnement local pour le projet avec une bibliothèque privée
Sauvegarde de l’état de la bibliothèque privée du projet. Les packages utilisés et leur version sont détaillés dans le fichier renv.lock
Docker
Docker
est un outil de conteneurisationDocker
- workflowdockerfile
targets
Ce package permet de structurer un pipeline d’analyses sous une forme bien précise composé d’étapes écrit dans un schéma global (workflow). On pourrait le comparer à un petit snakemake
ou nextflow
sous R
.
Facilite la parallélisation.
Écrire un pipeline d’analyse sous la forme d’un workflow dont chacune des étapes est reliée et dépendante les une des autres. Le but est de structurer le workflow en étapes prédéfinies et toutes structurées de la même manière (une entrée, une fonction, une sortie) et dont leur état est référencé lors de l’exécution du pipeline.
├── _targets.R : le script d'execution principal
├── data/
│ ├── robject.RData : un objet R
│ ├── data.csv : les données
├── R/
│ ├── functionsMain.R : les fonctions principales utilisées pour réaliser des analyses
│ ├── functionsPlots.R : les fonctions utilisées pour réaliser les graphiques
│ ├── functionsTests.R : les fonctions secondaires
├── _output/
│ ├── output.csv : fichiers de sortie
├── _targets/
│ ├── meta/
│ ├── objects/
│ ├── user/
│ ├── workspaces/
_targets.R
library(targets)
tar_source()
tar_option_set(packages = c("readr", "dplyr", "ggplot2"))
list(
tar_target(file, "data.csv", format = "file"), # chaque nom de cible doit être unique
tar_target(data, get_data(file)),
tar_target(model, fit_model(data)),
tar_target(plot, plot_model(model, data))
)
La fonction tar_make()
exécute le pipeline dans son ensemble en respectant l’ordre des étapes écrites dans le fichier _targets.R
.
Quand on exécutera à nouveau le pipeline seules les étapes ayant été modifiées seront de nouveau exécutées.
La fonction tar_visnetwork()
affiche un DAG du pipeline au temps t, mettant en évidence l’état des étapes (done
, waiting
, error
).
Contrairement à une utilisation classique de R
, les objets ne sont pas stockés dans l’environnent global mais dans les dossiers _targets
> objects
. Il s’agit de fichiers compilés lisibles uniquement par targets
via la commande tar_read(object)
:
Appeler les objets de sortie de targets
dans les chunks d’un fichier qmd
:
ou
quarto
au pipelineIl est possible de générer un document quarto
avec la fonction quarto_render
du package quarto
.
Unifier en unique document contexte, code, résultat, interprétation pour assure la cohérence des analyses …
quarto
Rmarkdown
html
, pdf
, docx
, ePub
, …---
title: "Quarto Computations"
---
This dataset contains a subset of the fuel economy data from the EPA.
Specifically, we use the `mpg` dataset from the **ggplot2** package.
```{r}
#| label: load-packages
#| echo: false
library(ggplot2)
```
The visualization below shows a positive, strong, and linear relationship between the city and highway mileage of these cars.
Additionally, mileage is higher for cars with fewer cylinders.
```{r}
#| label: scatterplot
ggplot(mpg, aes(x = hwy, y = cty, color = cyl)) +
geom_point(alpha = 0.5, size = 2) +
scale_color_viridis_c() +
theme_minimal()
```
```{r}
#| label: "setup"
#| include: false
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(DT)
```
Les options sont déplacées au sein du chunk avec #|
(hash-pipe) pour chaque ligne. Transition facilitée avec knitr::convert_chunk_header()
viewof bill_length_min = Inputs.range(
[32, 50],
{value: 35, step: 1, label: "Bill length (min):"}
)
viewof islands = Inputs.checkbox(
["Torgersen", "Biscoe", "Dream"],
{ value: ["Torgersen", "Biscoe"],
label: "Islands:"
}
)
.gitlab-ci.yml
# The Docker image that will be used to build your app
image: rocker/verse:4.2
# Functions that should be executed before the build script is run
before_script:
- quarto install extension davidcarayon/quarto-inrae-extension --no-prompt
pages:
script:
- quarto render
artifacts:
paths:
# The folder that contains the files to be exposed at the Page URL
- public
rules:
# This ensures that only pushes to the default branch will trigger
# a pages deploy
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
git
et le partager sur Git[Lab|Hub]docker
et les packages avec renv
targets
quarto
git
et le partager sur Git[Lab|Hub]docker
et les packages avec renv
targets
quarto
PEPI IBIS – 15 septembre 2023
Comment ça marche ?