Pour le partage et la reproductibilité de ses analyses
Séance ElementR - Octobre 2023
Hugues Pecout (CNRS, UMR Géographie-Cités)
Adapter ses méthodes de travail traditionnelles
L’utilisation d’un langage de programmation promet des perspectives intéressantes :
Permet la mise en place de chaîne de traitement complète et singulière
Offre plus de transparence pour ses analyses
Facilite le partage de son travail
Permet la réproductibilité de ses analyses
⚠ Mais cela implique de nouvelles méthodes de travail
Comment rendre mes scripts intelligibles pour mes collègues (et pour moi !) ?
Comment assurer une certaine reproductibilité de mes scripts ?
Comment mettre à disposition et archiver du code source et ses résultats ?
Solutions ?
Pratique de laprogrammation lettrée
Utilisation dedocuments computationnels
Gestion et partage du code avec uneforge logicielle
Literate programming
La programmation lettrée est une approche de la programmation qui se veut différente du paradigme de programmation structurée.
« Nous devons changer notre attitude traditionnelle envers la construction des programmes : au lieu de considérer que notre tâche principale est de dire à un ordinateur ce qu’il doit faire, appliquons-nous plutôt à expliquer à des êtres humains ce que nous voulons que l’ordinateur fasse. (…)
Celui qui pratique la programmation lettrée peut être vu comme un essayiste, qui s’attache principalement à exposer son sujet dans un style visant à l’excellence. Tel un auteur, il choisit, avec soin, le dictionnaire à la main, les noms de ses variables et en explique la signification pour chacune d’elles. Il cherche donc à obtenir un programme compréhensible parce que ses concepts sont présentés dans le meilleur ordre possible. Pour cela, il utilise un mélange de méthodes formelles et informelles qui se complètent. »
Le paradigme de la programmation lettrée, pensé et mis en oeuvre par Donald Knuth (1977-78), s’éloigne dans son écriture de l’ordonnancement imposé par l’ordinateur, et à la place autorise les développeurs à utiliser un ordre imposé par la logique et le fil de leur pensée.
#-----------------------------------------------------------------# Représentation graphique # de la répartition d'individus# discrétisés en quatre classes ## H. Pecout# 3 Octobre 2023#-----------------------------------------------------------------# Discrétisation la variable Sepal.Length (données iris)## Statistiques sur la série statistique 'Sepal.Length'summary(iris$Sepal.Length)## Histogramme de la distributionhist(iris$Sepal.Length)## Choix des bornes de classes (amplitude égale)bornes_des_classes <-c(min(iris$Sepal.Length), 5, 6, 7, max(iris$Sepal.Length))## Choix des noms de classesnom_des_classes <-c("Trés petites","petites","grandes","Très grandes")## Discrétisation de la variable 'Sepal.length'iris$classe <-cut(iris$Sepal.Length,breaks = bornes_des_classes,labels = nom_des_classes,include.lowest =TRUE)#---------------------------------------------------------------------# Représentation de la distribution selon la discrétisation## Bibliothèque pour la représentation graphiquelibrary(ggplot2)## Représentation graphique de la distributionggplot(data = iris, aes(x = classe)) +# Choix des données et de la variable à représentergeom_bar() +# Choix du type de représentationxlab("") +# Suppression du nom de l'axe xylab("") +# Suppression du nom de l'axe yggtitle("Répartition par classe") +# Titre du graphiquetheme(plot.title =element_text(size=27), # Taille de la police titre axis.text=element_text(size=19)) # Taille des labels d'axe
LP et document computationnel
Il est possible de faire de la programmation lettrée dans n’importe quel type de document…
Mais le document computionnel est l’environnement parfait pour mettre en oeuvre ce paradigme.
Un document computationnel permet de combiner du langage naturel et du langage de programmation :
Le texte peut être mis en forme
Le code peut être affiché, éxécuté et les résultats affichés
La programmation lettrée et les documents computionnels sont apparus à la même période, celle de l’émergence du concept de recherche reproductible !
💻 70’s show
Les premiers notebooks
1970 : Scratchpad (Axiom)
1987 : MathCad
1988 : Mathematica
1989 : Maple
2011 : IPython
Émergence de la recherche reproductible
Jon Claerbout est l’un des premiers chercheur à exprimer le fait que les méthodes de calcul menacent la reproductibilité de la recherche si l’on ne donne pas un accès libre aux données et aux logiciels qui sous-tendent.
En 1976, il publie un ouvrage référence en traitement de signal :
« Fundamentals of Geophysical Data Processing »
Cette 1ère version - non-reproductible - sera le début d’un long travail de recherche sur la reproductibilité… Via des notebooks !
Émergence duLiterate Programming
Le concept de programmation lettrée est pensé et conçu par Donald Knuth (1977-78). Le notebook se présente comme un outil idéal pour mettre en œuvre ce paradigme.
Document computationnel ?
Définition : interface de programmation qui permet de combiner des sections en langage naturel et des sections en langage informatique.
En raison de l’évolution et de la diversité des outils logiciels disponibles dans ce domaine, il existe de nombreuses dénominations pour les documents computationnels .
Cela reflète la diversité de leurs caractèristiques, de leurs fonctionnalités et des approches différentes de conception.
C’est la raison pour laquelle, les noms propres des différents dispositifs son souvent utilisés (ex : carnet Jupyter, Observable, Rmarkdown, Quarto…)
Article exécutable
Bloc-code (Arthur Perret, 2021)
Document computationnel
Document électronique interactif
Cahiers de programmation
Cahier électronique d’analyse
Calepin électronique
Carnet de code
Manifeste algorithmique
Notebook
…
Un outil, plusieurs pratiques
La mise en forme du texte se fait à l’aide d’un langage de balisage (Markdown, html…)
Le YAML en début de document est délimité par 3 tirets : “---”.
Il contient des variables paramétrables qui seront prises en compte à la compilation du document.
---title: Programmation lettrée et Notebookdate: 03/10/2023---
Ces variables sont des métadonnées comme le titre, auteur·es, date… Mais aussi des indications sur le format de sortie et la mise en page (template, TOC, numérotation, CSS, Biblio…).
L’indentation doit être parfaitement respectée
YAML Rmarkdown
---title: Programmation lettrée et Notebooksubtitle: Mise en pratique avec Rmarkdown et Quartoauthor: Hugues Pecoutdate: 2023-10-03css: style.cssbibliography: references.bibcsl: apa.cslnocite:'@*'output: rmdformats::readthedown:self_contained:truehighlight: tango---
YAML Quarto
---title: Programmation lettrée et Notebooksubtitle: Mise en pratique avec Rmarkdown et Quartoauthor: Hugues Pecoutinstitute:"Géographie-Cités, CNRS"lang: frformat:revealjs:template-partials:- title-slide.htmltheme:[dark, styles.scss]logo: img/ElementR.pngfooter:"Séance ElementR - Document computationnel"scrollable:TRUEoverview:TRUEtransition: fademenu:TRUEcss: style.css---
II. Corps du document
Deux types de contenus peuvent s’entremêler dans le corps d’un notebook :
A. Texte balisé en markdown pour la mise en forme.
B. Bloc de code (ou chunk en R) contenant un langage de programmation.
À la compilation du document :
Le code est exécuté (ou non) et ses résultats, ainsi que le texte balisé en markdown sont mis en forme pour généré un document en pdf, html, word…
echo: FALSE → le bloc de code ne sera pas affichés.
message: FALSE → Les messages renvoyés ne seront pas affichés.
warning: FALSE → Les warnings renvoyés ne seront pas affichés.
fig.align: center → Les représentations graphiques générées seront centrées sur la page.
out.width: 30% → Les représentations graphiques générées seront dimensionnées à 30% de la page.
Résultat en sortie :
Premiers pas avec Rmarkdown
Premier pas avec Rmarkdown
Créez un nouveau projet Rstudio
Créez un nouveau fichier.rmd (sortie html) → Menu File > New File > R Markdown...
Premier pas avec Rmarkdown
Enregistrez ce fichier.rmd à la racine de votre projet Rstudio.
Premier pas avec Rmarkdown
Knitez le document Rmd.
🧶 Tricot d’un Rmarkdown ?
Pandoc est généralement pré-installé sur les systèmes d’exploitation MACOS et Windows. Si vous n’avez pas \(\LaTeX\) d’installé, utilisez le packagetinytexpour la compilation en pdf.
Premier pas avec Rmarkdown
Pour ajouter un nouveau chunk, positionnez le curseur dans le document puis cliquez sur :
#------------------------------------------------------------------------## Titre: Fonctions R-base & package ggplot2# Sous-titre: Fonctions R-base & package ggplot2# Auteur : Vous# Date: courante#------------------------------------------------------------------------## Partie 1. Discrétisation la variable Sepal.Length (données iris) ------### 1.2. Statistiques sur la série statistique 'Sepal.Length'#### -> Montrez seulement la sortie graphiquesummary(iris$Sepal.Length)## 1.3. Histogramme de la distributionhist(iris$Sepal.Length)## 1.4. Choix des bornes de classes (amplitude égale)bornes_des_classes <-c(min(iris$Sepal.Length), 5, 6, 7, max(iris$Sepal.Length))## 1.5. Choix des noms de classesnom_des_classes <-c("Trés petites","petites","grandes","Très grandes")## 1.6. Discrétisation de la variable 'Sepal.length'iris$classe <-cut(iris$Sepal.Length,breaks = bornes_des_classes,labels = nom_des_classes,include.lowest =TRUE)# Partie 2. Représentation de la distribution selon la discrétisation ---### 2.1. Bibliothèque pour la représentation graphiquelibrary(ggplot2)## 2.2. Représentation graphique de la distributionggplot(data = iris, aes(x = classe)) +# Choix des données et de la variable à représentergeom_bar() +# Choix du type de représentationxlab("") +# Suppression du nom de l'axe xylab("") +# Suppression du nom de l'axe yggtitle("Répartition par classe") +# Titre du graphiquetheme(plot.title =element_text(size=27), # Taille de la police titre axis.text=element_text(size=19)) # Taille des labels d'axe
Consignes :
Insérez les métadonnées (titre, auteur…) dans le YAML.
Structurez en partie (#) et commentez le hors des chunks.
Isolez chaque fonction dans un chunk unique.
L’ensemble des chunks doivent être exécutés.
Masquez les chunk (echo) des parties 1.2, 1.3 et 2.1.
Dimensionnez le plot généré (2.2) à 50% (out.width)
Centrez le plot généré (fig.align).
Ajoutez la numérotation automatique des parties (number_sections dans le YAML).
Les modèles de mise en page (template) Rmarkdown sont fournis via des packages. Il en existe beaucoup, que ce soit pour de simple document(PDF, HTML…), un article, un livre, une thèse, un diaporama, un tutoriel ou encore un site web statique.
Quarto est un nouveau système open-source de publication d’articles scientifiques et techniques basé sur Pandoc. C’est un outil orienté LP, plus moderne que le Rmarkdown et facilement adaptable à différents cadres d’utilisations.
Il permet d’exploiter différents langages de programmation tels que R, Python, Julia ou JavaScript.
Quarto unifie et étend les fonctionnalités offertes par les différents notebooks existant, plus particulièrement les extensions Rmarkdown.
Quarto est développé par Posit™️ (Rstudio). Cependant, le périmètre d’utilisation de ce système s’étend au delà de la communauté R.
Quarto peut être installé et utilisé de différentes manières :
En tant que logiciel et utilisable en ligne de commande depuis le terminal.
Au délà de proposer un système performant et complet pour la production de documentations scientifiques et techniques, Quarto tente également de rendre la pratique des documents computationnels plus accessible.
Quel avenir pour le Rmarkdown ?
Rmarkdown restera à moyen terme supporté par Posit™ (Rstudio), mais les efforts de développement seront concentrées sur Quarto. Cela risque de se répercuter sur la communauté des utilisateurs : le développement et la maintenance d’extensions Rmardkown devraient ralentir.
Pas de panique : la conversion ou la migration vers quarto est simple !
Que peut-on faire avec Quarto ?
Quarto propose directement 4 types de publications possibles :
des articles ou rapports (HTML, PDF, MS Word, ePub…)
des présentations (Revealjs, PowerPoint, Beamer)
des livres ou manuel (HTML, PDF, MS Word, ePub…)
des sites web
À ce jour, peu de modèles de mise en page et d’extensions ont été développés. Néanmoins,le système Quarto propose directement toutes les fonctionnalités suffisantes pour créer un document scientifique de qualité (ex: équations, citations, références croisées, table des matière, des figures, note de bas de page, mise en page avancée, et même de l’interactivité pour les diaporama).
Quoi de neuf par rapport au Rmarkdown ?
De manière générale :
Multi-langage (Julia, Python, R, Observable),
De nouvelles options d’interactivité (notamment pour le format présentation),
Publication des sites web facilité,
Conversion d’un type de publication vers un autre facilité (ex : document -> presentation) .
Des fonctionnalités de mise en page plus avancées :
id name region pop gdp gdppc year
1 AFG Afghanistan Asia 38928341 19807067268 508.81 2020
2 AGO Angola Africa 32866268 62306913444 1895.77 2020
3 ALB Albania Europe 2837743 14799615097 5215.28 2020
4 AND Andorra Europe 77146 3155065488 40897.33 2019
5 ARE United Arab Emirates Asia 9770526 421142267937 43103.34 2019
6 ARG Argentina America 45376763 383066977654 8441.92 2020
Notebook polyglotes
C. Jointure fond de carte - tableau (R)
world <-merge(countries, data, by.x ="ISO3", by.y ="id")
viewof val = Inputs.radio(["pop","gdp"], {label:"Data to be displayed",value:"pop"})viewof step = Inputs.range([10,50], {label:"step",step:1,value:15})viewof k = Inputs.range([5,30], {label:"Radius of the largest circle",step:1,value:15})viewof dorling = Inputs.toggle({ label:"Avoid overlap (dorling)" })
bertin.draw({params: { projection: d3.geoBertin1953() },layers: [ {type:"header",text: (val =="pop"?"Population mondiale":"PIB mondial") +` (step = ${step})`,fill:"#cf429d" }, {type:"regularbubble",geojson: world,step: step,values: val,k: k,fill:"#cf429d",tooltip: ["$NAMEen","","Valeur pour le pays",`$${val}`,"","Valeur du point","$___value"// ___value is the name of the computed field with the value of the point ],dorling: dorling }, { geojson: world,fill:"white",fillOpacity:0.3,stroke:"none" }, { type:"graticule" }, { type:"outline" } ]})
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)
Des présentations + interactives
Line Highlighting (code-line-numbers) :
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)
Des présentations + interactives
Line Highlighting (code-line-numbers) :
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)
Des présentations + interactives
Line Highlighting (code-line-numbers) :
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat <-48.90717808167005lng <-2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)
Des présentations + interactives
Line Highlighting (code-line-numbers) :
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)
Des présentations + interactives
Line Highlighting (code-line-numbers) :
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)
Des présentations + interactives
menu: TRUE - whiteboard: TRUE - chalkboard: TRUE
Pointer
Des présentations + interactives
Auto animate
Des présentations + interactives
Auto animate
Des présentations + interactives
Auto animate & code animations
library(sf)library(leaflet)
Des présentations + interactives
Auto animate & code animations
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123
Des présentations + interactives
Auto animate & code animations
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))
Des présentations + interactives
Auto animate & code animations
library(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)
Exemple 1 : Créer un Quarto Document ou une Quarto présentation : File > New File > Quarto...
Avertissement
Un Quarto document ou présentation = Un seul fichier .qmd
Exemple 2 : Créer un Quarto wesite ou Quarto Book : File > New Project > New Directory > ...
Avertissement
Un Quarto book ou website = Plusieurs fichiers .qmd. Un fichier par chapitre ou page du site.
_quarto.yml
Tous les projets Quarto comprennent un fichier de configuration _quarto.yml. Cela concerne donc obligatoirement les Quarto books et les Quarto websites.
Tout document compilé (Render) dans le répertoire du projet héritera automatiquement des métadonnées définies au niveau du projet. Le fichier de projet contient à la fois des options globales qui s’appliquent à tous les formats (par exemple TOC et bibliographie) et des options spécifiques à chaque format. Voici unexemple de fichier _quarto.yml :
Il s’agit en quelque sorte d’une en-tête (YAML) globale pour tout le repértoire.
Cela n’empêche pas que chaque fichier .qmd du projet contient également sa propre en-tête (YAML)
Compiler un Quarto
=
Il est possible d’utiliser jupyter pour la compilation.
Exercice
A. Créez un nouveau projet Quarto book.File > New Project > New Directory > Quarto Book...
Ajouter les métadonnées principales : titre, sous-titre, nom de l’auteur et affiliations, date… Puis Render en HTML
Exemple :
_quarto.yml
book:title:"Mon premier quarto book"subtitle:"Et j'en suis très fier..."date:"03/10/2023"author:-name: Hugues pecoutorcid: 0000-0002-0246-0954affiliations:-name: CNRS-name: UMR Géographie-Cités
La langue du quarto est l’anglais par défault. Modifiez la langue pour le français :
_quarto.yml
lang: fr
Modifier le theme utilisé par défault (cosmo). Pour choisir un théme :
Ajoutez du contenu dans votre nouveau chapitre : Titre, texte mis en forme, image, équation, vidéo, bloc de code, note de bas de page, citation, diagramme, équation….
Quelques exemples :
Titre & liste
# Ma partie 1## Introduction Cette partie de ma thèse est sans doute la meilleure car :- **Ma directrice le pense**- Elle n'est **pas encore rédigée**
Ma partie 1
Introduction
Cette partie de ma thèse est sans doute la meilleure car :
Ma directrice le pense
Elle n’est pas encore rédigée
Citation & note de bas de page
## Citation> *L'histoire n'est que la géographie dans le temps, comme la géographie n'est que l'histoire dans l'espace.*>> Elisée Reclus## Note de bas de pageL'ontologie[^1] est une branche de la philosophie et plus spécifiquement de la métaphysique qui, dans son sens le plus général, s'interroge sur la signification du mot « être ».[^1]: Perso, je n'ai jamais compris
Citation
L’Histoire n’est que la Géographie dans le temps, comme la géographie n’est que l’histoire dans l’espace.
Elisée Reclus
Note de bas de page
L’ontologie1 est une branche de la philosophie et plus spécifiquement de la métaphysique qui, dans son sens le plus général, s’interroge sur la signification du mot « être ».
Pour inclure le contenu d’un objet R directement dans une zone de texte :
Pour inclure le contenu d'un objet R directement dans une zone de texte : 38.59
Référence bibliographique
La référence bibliographique doit être renseignée dans un fichier.bib (ex : cf. le fichier reference.bib à la racine du répertoire). Plus de détail sur cette page.
Il est très simple de faire référence à de la bibliographie en markdown. Ex : [@bertin1967]
Il est très simple de faire référence à de la bibliographie en markdown. Ex : (Bertin 1967)
Note, warning…
:::{.callout-warning}## Précautions d'usagesBla bla bla bla::::::{.callout-note}## Ceci est une noteBla bla bla bla::::::{.callout-important}## Ceci est importantBla bla bla bla:::
Précautions d’usages
Bla bla bla bla
Ceci est une note
Bla bla bla bla
Ceci est important
Bla bla bla bla
Markdown avancé (div)
::: {.panel-tabset} ## Doctorant·es![](img/doc.jpg)## Maître·sse de conférence![](img/mcf.jpg)## Professeur·e![](img/prof.jpg):::
Gitest un système de gestion de version distribué pour :
tracker les changements dans les fichiers texte
gérer l’historique du code source
partager le code dans des dépots distants
GitLabet GitHub sont des services web d’hébergement et de gestion de version (issue tracker, collaboration, hébergement web, CI/CD), qui reposent sur le logiciel de version Git.
Notebook + GitLab (ou GitHub) = 🔥🔥🔥
Sources des notebooks = fichiers texte
➡️ Suivi des modifications (commit, branches, etc.)
➡️ Partage des fichiers sources (dépôt public ou privé)
GitLab et GitHub permettent de compiler un notebook
➡️ Continuous Integration
GitLab et GitHub permettent de déployer (mise en ligne) un notebook HTML
➡️ Continuous Deployment
Un exemple ?
Ceci est un notebook…
Chunk de code R (exécuté et affiché) :
##------------------------ PACKAGES utilisés --------------------------## # install.packages("sf")# install.packages("leaflet")# Chargement des librairieslibrary(sf)library(leaflet)##----------------- Création d'un objet sf (point) --------------------## # Cordonnées du Centre des colloques du Campus Condorcetlat =48.90717808167005lng =2.3665081750584123# Création d'un pointptsfg <-st_point(c(lng, lat)) # Ajout du système géographique de référenceptsfc <-st_sfc(ptsfg, crs = (4326))# Création de l'attribut "name"ptdf <-data.frame(id=1, name ="Campus Condorcet")# Création de l'objet sf ponctuelHere <-st_sf(ptdf,geometry = ptsfc)##--------------------- Création carte dynamique ----------------------## # Lien vers une photo de l'IRSPfile <-'https://www.campus-condorcet.fr/medias/photo/vincentbourdon8a2528_1607697136983-jpg?ID_FICHE=4599'# Construction du markericons <-awesomeIcons(icon ='ios-people',iconColor ='white',library ='ion',markerColor ='blue')# Affichage du point - carte interactivemamap <-leaflet(Here) %>%setView( lat = lat, lng = lng, zoom =13) %>%addProviderTiles("GeoportailFrance.orthos") %>%addAwesomeMarkers(icon = icons,popup =paste("<img src =", file, ">", "<p style='text-align:center;'>Centre des Colloques</br>du Campus Condorcet</a></p>"))