-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.json
1 lines (1 loc) · 41.1 KB
/
index.json
1
[{"authors":["stateofther"],"categories":null,"content":"À propos Les participants à State of the R sont issus de la recherche académique en statistique et dans des disciplines connexes (machine learning, optimisation, analyse numérique). Nous concourons dans notre quotidien au développement de nouvelles méthodes d\u0026rsquo;analyse de données, en nous appuyant sur des outils informatiques et de data science issus de la communauté de recherche académique et des grands acteurs du numériques. Notre position de chercheur(es) en statistique nous impose une veille constante sur les innovations et l\u0026rsquo;évolution permanente des outils offerts par la communauté (R, Python, Julia, TensorFlow, calcul GPU, etc.).\nDans ce contexte, R/Rstudio sont nos références car nous pensons qu\u0026rsquo;ils sont des outils d\u0026rsquo;interface extraordinaires permettant d\u0026rsquo;intégrer toutes les phases de l\u0026rsquo;analyse (collecte, prétraitement, ajustement des modèles et calcul, écriture scientifique, diffusion des résultats) en communiquant facilement avec les nombreux outils et langages informatiques spécialisés pour chacune de ces phases: R/Rstudio sont donc parfaitement adaptés à la recherche, à l\u0026rsquo;enseignement, au développement et à la diffusion des connaissance.\nFort de ce constat, le groupe State of the R a vu le jour fin août 2017 au cours d\u0026rsquo;un atelier \u0026ldquo;bootcamp\u0026rdquo; d\u0026rsquo;une semaine à Roscoff réunissant une dizaine de personnes. Sa liste de diffusion comporte désormais une quarantaine d\u0026rsquo;inscrits. Le groupe réunit des utilisateurs quotidiens du logiciel R/Rstudio, dans la perspective de partager et d\u0026rsquo;approfondir les savoir-faire, d’échanger autour des dernières innovations et d\u0026rsquo;en favoriser la diffusion. Son objectif majeur est de définir un espace qui permette d’adopter un vocabulaire commun, des pratiques de programmation performantes et des modes de représentation standardisées pour une meilleure généricité des outils statistiques développés par notre communauté.\n","date":-62135596800,"expirydate":-62135596800,"kind":"term","lang":"en","lastmod":-62135596800,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"http://stateofther.github.io/author/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/author/","section":"authors","summary":"À propos Les participants à State of the R sont issus de la recherche académique en statistique et dans des disciplines connexes (machine learning, optimisation, analyse numérique). Nous concourons dans notre quotidien au développement de nouvelles méthodes d\u0026rsquo;analyse de données, en nous appuyant sur des outils informatiques et de data science issus de la communauté de recherche académique et des grands acteurs du numériques.","tags":null,"title":"","type":"authors"},{"authors":null,"categories":null,"content":"","date":1598832000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598832000,"objectID":"b38940b1fee1236c7b8196c2874a5fb5","permalink":"http://stateofther.github.io/project/finistr20/","publishdate":"2020-08-31T00:00:00Z","relpermalink":"/project/finistr20/","section":"project","summary":"Page web résumant les activités de la semaine d'ateliers à Roscoff 2020","tags":["bootcamp"],"title":"FinistR'20","type":"project"},{"authors":null,"categories":["workshop"],"content":"Mahendra nous offre un tour su la plateforme Migale et plus généralement sur la soumission de job sur un serveur de calcul via qsub et les packages purrr, future and furrr.\n La présentation ","date":1584057600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1584057600,"objectID":"ea64dffca67c2d6ed9b94c860e4965f6","permalink":"http://stateofther.github.io/post/migale/","publishdate":"2020-03-13T00:00:00Z","relpermalink":"/post/migale/","section":"post","summary":"Mahendra nous offre un tour su la plateforme Migale et plus généralement sur la soumission de job sur un serveur de calcul via qsub et les packages purrr, future and furrr.","tags":["migale"],"title":"La plateforme Migale","type":"post"},{"authors":null,"categories":["workshop"],"content":"Antoine nous parlera de la manipulation des objets un peu particuliers de R que sont les facteurs, les dates et les heures, et les chaines de caractères et expressions régulières. Ceci finira notre tour du tidyverse avec forcats, lubridate et stringr, qui permettent de manipuler très facilement et lisiblement ces objets.\n lien vers les slides ","date":1576195200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1576195200,"objectID":"6a04321383df8f866df8a6540707c318","permalink":"http://stateofther.github.io/post/tidyverse_sequel/","publishdate":"2019-12-13T00:00:00Z","relpermalink":"/post/tidyverse_sequel/","section":"post","summary":"Antoine nous parlera de la manipulation des objets un peu particuliers de R que sont les facteurs, les dates et les heures, et les chaines de caractères et expressions régulières. Ceci finira notre tour du tidyverse avec forcats, lubridate et stringr, qui permettent de manipuler très facilement et lisiblement ces objets.","tags":["tidyverse_sequel"],"title":"Tidyverse suite (et fin??) avec forcats, lubridate et stringr","type":"post"},{"authors":null,"categories":["workshop"],"content":"Le programme de l\u0026rsquo;atelier proposé sur des développements autour de R Markdown\n Créer des contenus pour R Markdown et shiny \u0026ndash; Reporting tabulaire avec le package flextable Les fonctionnalités du package Les techniques utilisées pour l’intégration avec knitr Pratiquons : Créer une méthode d’impression tabulaire avec knitr et flextable pour les documents R Markdown \u0026ndash; htmlwidgets : package ggiraph Les fonctionnalités du package Intégration dans le contexte shiny et dans le contexte R Markdown Implémentation du htmlwidget Pratiquons : Créer un simple htmlwidget Personnalisation des documents R Markdown Le triptyque CSS/JavaScript/HTML Exemples de thèmes xaringan, pagedown, blogdown Pratiquons : personnalisation d’un thème pagedown et d’un thème xaringan (https://github.com/davidgohel)\n","date":1573776000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1573776000,"objectID":"0a4b34e4c44bc6a4bf9812026763d7d0","permalink":"http://stateofther.github.io/post/rmarkdown/","publishdate":"2019-11-15T00:00:00Z","relpermalink":"/post/rmarkdown/","section":"post","summary":"Le programme de l\u0026rsquo;atelier proposé sur des développements autour de R Markdown\n Créer des contenus pour R Markdown et shiny \u0026ndash; Reporting tabulaire avec le package flextable Les fonctionnalités du package Les techniques utilisées pour l’intégration avec knitr Pratiquons : Créer une méthode d’impression tabulaire avec knitr et flextable pour les documents R Markdown \u0026ndash; htmlwidgets : package ggiraph Les fonctionnalités du package Intégration dans le contexte shiny et dans le contexte R Markdown Implémentation du htmlwidget Pratiquons : Créer un simple htmlwidget Personnalisation des documents R Markdown Le triptyque CSS/JavaScript/HTML Exemples de thèmes xaringan, pagedown, blogdown Pratiquons : personnalisation d’un thème pagedown et d’un thème xaringan (https://github.","tags":["rmarkdown"],"title":"Développement autour du R-Markdown","type":"post"},{"authors":null,"categories":["workshop"],"content":"Christophe Botella nous a preparé un atelier pratique présentant le deep learning et comment le mettre en application avec le package R-Mxnet.\n_ Le code de l\u0026rsquo;atelier\n Et la présentation ","date":1571356800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1571356800,"objectID":"751d1d84c138ef1351e34347b268795a","permalink":"http://stateofther.github.io/post/rmxnet/","publishdate":"2019-10-18T00:00:00Z","relpermalink":"/post/rmxnet/","section":"post","summary":"Christophe Botella nous a preparé un atelier pratique présentant le deep learning et comment le mettre en application avec le package R-Mxnet.\n_ Le code de l\u0026rsquo;atelier\n Et la présentation ","tags":["rmxnet"],"title":"R-Mxnet pour des applications du deep learning","type":"post"},{"authors":null,"categories":null,"content":"","date":1567209600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1567209600,"objectID":"e47be19320c6d56ea6d2de31ddacd21c","permalink":"http://stateofther.github.io/project/finistr19/","publishdate":"2019-08-31T00:00:00Z","relpermalink":"/project/finistr19/","section":"project","summary":"Page web résumant les activités de la semaine d'ateliers à Roscoff 2019","tags":["bootcamp"],"title":"FinistR'19","type":"project"},{"authors":null,"categories":["workshop"],"content":"Pierre et Benjamin nous ont préparé \u0026lsquo;quelque chose sur Shiny\u0026rsquo;:\n La présentation ","date":1560211200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1560211200,"objectID":"8d43844b72a9c5857ac3f2ec2c370c14","permalink":"http://stateofther.github.io/post/shiny/","publishdate":"2019-06-11T00:00:00Z","relpermalink":"/post/shiny/","section":"post","summary":"Pierre et Benjamin nous ont préparé \u0026lsquo;quelque chose sur Shiny\u0026rsquo;:\n La présentation ","tags":["shiny"],"title":"Comment Shiny peut vous aider dans vos simulations, vos collaborations et vos cours","type":"post"},{"authors":null,"categories":["workshop"],"content":"Au cours d\u0026rsquo;une séance découverte un peu spécial, donnée lors de l\u0026rsquo;assemblée générale du département de mathématique et informatique de l\u0026rsquo;INRA, Mahendra nous a fait découvrir les potentialités de {plotly,ggplotly,crosscall}\n La présentation en full HTML Le chargement peut prendre du temps (googlefonts\u0026hellip;)\n","date":1558483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1558483200,"objectID":"c0da4439519e1b224defc5415ae22d8e","permalink":"http://stateofther.github.io/post/plotly/","publishdate":"2019-05-22T00:00:00Z","relpermalink":"/post/plotly/","section":"post","summary":"Au cours d\u0026rsquo;une séance découverte un peu spécial, donnée lors de l\u0026rsquo;assemblée générale du département de mathématique et informatique de l\u0026rsquo;INRA, Mahendra nous a fait découvrir les potentialités de {plotly,ggplotly,crosscall}","tags":["plotly","ggplotly"],"title":"Introduction à plotly","type":"post"},{"authors":null,"categories":["workshop"],"content":"Matthieu et Éric nous propose une séance sur {rSTAN}, l\u0026rsquo;interface R à la bibliothèque C++ Stan. Il s\u0026rsquo;agit d\u0026rsquo;algorithme inférence b yésienne utilisant une variante du Monte-Carlo Hamiltonien. On peut aussi faire de l\u0026rsquo;inférence fréquentiste par optimisation.\nGros travail de Éric et Matthieu, et une base de document introductif très fouillé, merci!\n A bit of theory to understand Hamilton Monte Carlo Modèle Hiérarchique avec Stan Modèlisation Spatiale ","date":1555632000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1555632000,"objectID":"0c7feda1906b5696eea65f0cc1c38a16","permalink":"http://stateofther.github.io/post/rstan/","publishdate":"2019-04-19T00:00:00Z","relpermalink":"/post/rstan/","section":"post","summary":"Matthieu et Éric nous propose une séance sur {rSTAN}, l\u0026rsquo;interface R à la bibliothèque C++ Stan. Il s\u0026rsquo;agit d\u0026rsquo;algorithme inférence b yésienne utilisant une variante du Monte-Carlo Hamiltonien. On peut aussi faire de l\u0026rsquo;inférence fréquentiste par optimisation.","tags":["stan","rstan"],"title":"rSTAN, un outil d'inférence bayésienne","type":"post"},{"authors":null,"categories":["workshop"],"content":"Dans la continuité de ce qui a été fait à Beg-meil](https://stateofther.github.io/finistR2018/atelier3_package_creation.html), je vous propose un tour d\u0026rsquo;horizon des bonnes pratiques et de l\u0026rsquo;ensemble des outils disponibles pour réaliser le développement d\u0026rsquo;un package R. On parlera github, travis, {pkgdown], roxygen2, déploiement, {testthat], appveor, configure, Makevars, {usethis}, {devtools}, yaml, etc. Venez avec en tête de mettre les main dans le cambouis pour votre propre package.\n","date":1553212800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1553212800,"objectID":"68492f4b0d0ab27608179979ed9ca2cc","permalink":"http://stateofther.github.io/post/packages/","publishdate":"2019-03-22T00:00:00Z","relpermalink":"/post/packages/","section":"post","summary":"Dans la continuité de ce qui a été fait à Beg-meil](https://stateofther.github.io/finistR2018/atelier3_package_creation.html), je vous propose un tour d\u0026rsquo;horizon des bonnes pratiques et de l\u0026rsquo;ensemble des outils disponibles pour réaliser le développement d\u0026rsquo;un package R.","tags":["packages","travis"],"title":"Développement de package","type":"post"},{"authors":null,"categories":["workshop"],"content":"Séance dédiée à la préparation des satRday du lendemain:\n https://paris2019.satrdays.org Avec tous les bénévoles du groupe !\n","date":1550793600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1550793600,"objectID":"338744c69cfed3e62652460ef217ec33","permalink":"http://stateofther.github.io/post/satrday/","publishdate":"2019-02-22T00:00:00Z","relpermalink":"/post/satrday/","section":"post","summary":"Séance dédiée à la préparation des satRday du lendemain:\n https://paris2019.satrdays.org Avec tous les bénévoles du groupe !","tags":["satrday"],"title":"Organisation des premières satRday française à Paris du 23 février","type":"post"},{"authors":null,"categories":["workshop"],"content":"R package {bigstatsr} provides a special class of matrix whose data is stored on the disk instead of the RAM, but you can still access the data almost as if it were in memory. It is particularly useful is you have a large matrix to analyze but not enough RAM on your computer. It can still be useful for matrices that fit in your RAM because package {bigstatsr} provides very efficient and parallelized algorithms (have you ever found cor or svd too slow?).\nI will present the statistical and helper functions that are provided by package {bigstatsr} for this kind of matrices. R package {bigsnpr}, on top of {bigstatsr}, provides some tools that are specific to the analysis of genetic data. We\u0026rsquo;ll see what I can predict from your DNA using these two packages.\n https://privefl.github.io/bigstatsr/ ","date":1548374400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1548374400,"objectID":"5570d7c94b0cab4316ba6cd36a902e6c","permalink":"http://stateofther.github.io/post/bigstatsr/","publishdate":"2019-01-25T00:00:00Z","relpermalink":"/post/bigstatsr/","section":"post","summary":"R package {bigstatsr} provides a special class of matrix whose data is stored on the disk instead of the RAM, but you can still access the data almost as if it were in memory.","tags":["bigstatsr","bigsnpr"],"title":"Efficient analysis of large-scale matrices with two R packages: bigstatsr and bigsnpr","type":"post"},{"authors":null,"categories":["workshop"],"content":"Marco et Vincent vous proposent de prendre un peu de temps pour apprendre à se servir du package exams (disponible sur le CRAN) pour générer automatiquement des examens (QCM ou autres), corriger automatiquement ces examens, gérer un ensemble d\u0026rsquo;exercices collectivement, mettre en place une plateforme de e-learning. Gros programme mais un joli cadeau de Noël, puisque tout se fait en quelques lignes de code R !\n L\u0026rsquo;intégrale des slides ","date":1545264000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1545264000,"objectID":"b8d9b87eff8bc41d7529507c315d5f1a","permalink":"http://stateofther.github.io/post/pimp-exam/","publishdate":"2018-12-20T00:00:00Z","relpermalink":"/post/pimp-exam/","section":"post","summary":"Marco et Vincent vous proposent de prendre un peu de temps pour apprendre à se servir du package exams (disponible sur le CRAN) pour générer automatiquement des examens (QCM ou autres), corriger automatiquement ces examens, gérer un ensemble d\u0026rsquo;exercices collectivement, mettre en place une plateforme de e-learning.","tags":["exams","moodle"],"title":"Pimp my exam","type":"post"},{"authors":null,"categories":["workshop"],"content":"Antoine, notre fanatique du tidyverse, nous propose de jeter un coup d’oeil à broom et rsample, des packages de tidymodels, pour travailler proprement (aka en format tibble) avec les sorties S3 des méthodes statistiques comme lm ou kmeans et faciliter l’utilisation des méthodes de rééchantillonage.\n L\u0026rsquo;intégrale des slides ","date":1542931200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1542931200,"objectID":"786ea20fa8ea3e75d275dac9644c4968","permalink":"http://stateofther.github.io/post/tidymodels/","publishdate":"2018-11-23T00:00:00Z","relpermalink":"/post/tidymodels/","section":"post","summary":"Antoine, notre fanatique du tidyverse, nous propose de jeter un coup d’oeil à broom et rsample, des packages de tidymodels, pour travailler proprement (aka en format tibble) avec les sorties S3 des méthodes statistiques comme lm ou kmeans et faciliter l’utilisation des méthodes de rééchantillonage.","tags":["tidymodels","tidyverse","broom","rsample"],"title":"Modeling in the Tidyverse and applications to metagenomics data","type":"post"},{"authors":null,"categories":["workshop"],"content":"Un duo de choc, Raphaëlle et Marie, pour une séance dense sur laquelle était posée l\u0026rsquo;ombre du data imaginist \u0026ndash; et vive Harry Potter.\n L\u0026rsquo;intégrale des slides ","date":1539907200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1539907200,"objectID":"c7ad3d33274e305abc01c902a321f4cd","permalink":"http://stateofther.github.io/post/fancy-plotting/","publishdate":"2018-10-19T00:00:00Z","relpermalink":"/post/fancy-plotting/","section":"post","summary":"Un duo de choc, Raphaëlle et Marie, pour une séance dense sur laquelle était posée l\u0026rsquo;ombre du data imaginist \u0026ndash; et vive Harry Potter.\n L\u0026rsquo;intégrale des slides ","tags":["ggplot","gganimate","ggraph"],"title":"Fancy plotting with ggraph, gganimate","type":"post"},{"authors":null,"categories":null,"content":"","date":1535673600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1535673600,"objectID":"c00157a9c41449f81afe57b0cb9b64bd","permalink":"http://stateofther.github.io/project/finistr18/","publishdate":"2018-08-31T00:00:00Z","relpermalink":"/project/finistr18/","section":"project","summary":"Page web résumant les activités de la semaine d'ateliers à Beg Meil 2018","tags":["bootcamp"],"title":"FinistR'18","type":"project"},{"authors":null,"categories":["workshop"],"content":"Les trois mousquetaires Timothée, Mathieu et Félix (a.k.a riri fifi loulou) proposent une séances complète d\u0026rsquo;introduction à Rcpp accompagné de travaux pratiques.\nLes documents de la séances:\n Introduction Rappel d\u0026rsquo;architecture machine Rappel en C++ RcppArmadillo Fonctions Astuces Pour compléter, voir la page du bootcamp finistR2018 dédiée aux modules Rcpp.\n","date":1532044800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1532044800,"objectID":"e1afe75178f57d6fb1a7090c74606418","permalink":"http://stateofther.github.io/post/bases-rcpp/","publishdate":"2018-07-20T00:00:00Z","relpermalink":"/post/bases-rcpp/","section":"post","summary":"Les trois mousquetaires Timothée, Mathieu et Félix (a.k.a riri fifi loulou) proposent une séances complète d\u0026rsquo;introduction à Rcpp accompagné de travaux pratiques.\nLes documents de la séances:\n Introduction Rappel d\u0026rsquo;architecture machine Rappel en C++ RcppArmadillo Fonctions Astuces Pour compléter, voir la page du bootcamp finistR2018 dédiée aux modules Rcpp.","tags":["rcpp"],"title":"Bases en Rcpp","type":"post"},{"authors":null,"categories":["workshop"],"content":" Séverine et Tristan nous proposent une introduction à quelques outils permettant de manipuler (en particulier charger) de “grosses” tables de données sous R.\n bigmemory for loading large matrices bigalgebra provides BLAS and LAPACK linear algebra sparklyr for interfacing R with Spark Apache Les documents de la séances\n Présentation des enjeux, slides travaux pratiques (PDF), source Markdown code source: R base vs bigxx code source: R base vs sparklyr ","date":1529625600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1529625600,"objectID":"2083b5efa5c9582923519c46ff641c74","permalink":"http://stateofther.github.io/post/manipulating-half-big-data-in-r/","publishdate":"2018-06-22T00:00:00Z","relpermalink":"/post/manipulating-half-big-data-in-r/","section":"post","summary":"Séverine et Tristan nous proposent une introduction à quelques outils permettant de manipuler (en particulier charger) de “grosses” tables de données sous R.\n bigmemory for loading large matrices bigalgebra provides BLAS and LAPACK linear algebra sparklyr for interfacing R with Spark Apache Les documents de la séances","tags":["sparlyr","data.table","bigdata"],"title":"Manipulation de (quasi) big data en R","type":"post"},{"authors":null,"categories":["workshop"],"content":"Sophie et Christophe nous proposent une séance complète sur le deep-learning et l\u0026rsquo;interfaçage existant sous R:\n Une brève histoire du Deep-Learning Une introduction au Deep-Learning sous R travaux pratiques ","date":1527206400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1527206400,"objectID":"b86ccff90a810bec3cc087d93c3de32d","permalink":"http://stateofther.github.io/post/introduction-au-deep-learning-sous-r/","publishdate":"2018-05-25T00:00:00Z","relpermalink":"/post/introduction-au-deep-learning-sous-r/","section":"post","summary":"Sophie et Christophe nous proposent une séance complète sur le deep-learning et l\u0026rsquo;interfaçage existant sous R:\n Une brève histoire du Deep-Learning Une introduction au Deep-Learning sous R travaux pratiques ","tags":["deep learning"],"title":"Introduction au Deep Learning sous R","type":"post"},{"authors":null,"categories":["workshop"],"content":" Antoine nous propose une introduction dense et déjà avancée en passant en revue l’ensemble du tidyverse\n Les slides Xaringan de Antoine ","date":1525219200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1525219200,"objectID":"743b32ff2dc4b328ab265568ae05cd4f","permalink":"http://stateofther.github.io/post/une-introduction-au-tidyverse/","publishdate":"2018-05-02T00:00:00Z","relpermalink":"/post/une-introduction-au-tidyverse/","section":"post","summary":" Antoine nous propose une introduction dense et déjà avancée en passant en revue l’ensemble du tidyverse\n Les slides Xaringan de Antoine ","tags":["tidy","dplyr","magrittr"],"title":"Une introduction au tidyverse","type":"post"},{"authors":null,"categories":["workshop"],"content":"Éric nous présente les suites de l\u0026rsquo;introdution de Jessica aux très nombreux outils disponibles pour les statistiques spatiales sous R, notamment autour des packages sf et sp.\n slides et exercices, partie 1 slides et exercices, partie 2 ","date":1521763200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1521763200,"objectID":"06838a53bac923c7ec22dd8549629b31","permalink":"http://stateofther.github.io/post/spatial/","publishdate":"2018-03-23T00:00:00Z","relpermalink":"/post/spatial/","section":"post","summary":"Éric nous présente les suites de l\u0026rsquo;introdution de Jessica aux très nombreux outils disponibles pour les statistiques spatiales sous R, notamment autour des packages sf et sp.\n slides et exercices, partie 1 slides et exercices, partie 2 ","tags":["spatial"],"title":"Introduction au Spatial sous R","type":"post"},{"authors":null,"categories":["workshop"],"content":" Mahendra nous propose un retour d’expérience et quelques exercices sur le package DT pour la manipulation interactive de table.\n Les slides de Mahendra ","date":1519344000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1519344000,"objectID":"41cea2d06b26e2bb49ee386c3c99971c","permalink":"http://stateofther.github.io/post/rmarkdown-tableaux-interactifs-et-retour-d-experience/","publishdate":"2018-02-23T00:00:00Z","relpermalink":"/post/rmarkdown-tableaux-interactifs-et-retour-d-experience/","section":"post","summary":" Mahendra nous propose un retour d’expérience et quelques exercices sur le package DT pour la manipulation interactive de table.\n Les slides de Mahendra ","tags":["R Markdown","communication","DT","datatable","kable"],"title":"Rmarkdown: tableaux interactifs et retour d'expérience","type":"post"},{"authors":null,"categories":["workshop"],"content":" Antoine nous propose une série de slides sur R markdown et Xaringan\n Les slides Xaringan de Antoine ","date":1519344000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1519344000,"objectID":"516d740af27036b7846e52ed87b2e7ba","permalink":"http://stateofther.github.io/post/science-communication-with-r-style-r-markdown-xaringan/","publishdate":"2018-02-23T00:00:00Z","relpermalink":"/post/science-communication-with-r-style-r-markdown-xaringan/","section":"post","summary":" Antoine nous propose une série de slides sur R markdown et Xaringan\n Les slides Xaringan de Antoine ","tags":["R Markdown","communication","DT","datatable","kable"],"title":"Science Communication with R: Style, R Markdown \u0026 Xaringan","type":"post"},{"authors":null,"categories":["workshop"],"content":" L’atelier du jour avait pour objectif la découvert du package data.table au travers d’exercises proposés lors de la dernière édition de UseR. Les slides avec les énoncés sont disponibles ici.\nL’apport de notre atelier est d’avoir systématiquement essayé de traiter les questions avec - les fonctionalités R de base - les fonctionalités offertes par le tidyverse (principalement dplyr) - les fonctionnalités du package data.table\nPour les animateurs : vous êtes libre de compléter le post de blog. Nous ajouteroins des comparatifs en terme de temps de calcul plus tard (peut-être).\nPréliminaires C’est parti, on charge les packages requis\nlibrary(data.table) library(tidyverse) Les exercices seront traités à l’aide de deux tables jouets, dont on propose des contreparties en - object data.frame - object tibble - object data.table\nset.seed(20170703L) DF1 = data.frame(id = sample(1:2, 9L, TRUE), code = sample(letters[1:3], 9, TRUE), valA = 1:9, valB = 10:18, stringsAsFactors = FALSE) DF2 = data.frame(id = c(3L, 1L, 1L, 2L, 3L), code = c(\u0026quot;b\u0026quot;, \u0026quot;a\u0026quot;, \u0026quot;c\u0026quot;, \u0026quot;c\u0026quot;, \u0026quot;d\u0026quot;), mul = 5:1, stringsAsFactors = FALSE) ## corresponding data tibble TB1 \u0026lt;- as.tibble(DF1) ## Warning: `as.tibble()` is deprecated as of tibble 2.0.0. ## Please use `as_tibble()` instead. ## The signature and semantics have changed, see `?as_tibble`. ## This warning is displayed once every 8 hours. ## Call `lifecycle::last_warnings()` to see where this warning was generated. TB2 \u0026lt;- as.tibble(DF2) ## corresponding data tables DT1 \u0026lt;- as.data.table(DF1) DT2 \u0026lt;- as.data.table(DF2) Question 1 Subset all rows where id column equals 1 \u0026amp; code column is not equal to “c”\nbase base::subset(DF1, id == 1 \u0026amp; code != \u0026quot;c\u0026quot;) ## id code valA valB ## 1 1 a 1 10 ## 2 1 a 2 11 ## 4 1 a 4 13 with(DF1, DF1[id == 1 \u0026amp; code != \u0026quot;c\u0026quot;,]) ## id code valA valB ## 1 1 a 1 10 ## 2 1 a 2 11 ## 4 1 a 4 13 dplyr filter(TB1, id == 1 \u0026amp; code != \u0026quot;c\u0026quot;) ## # A tibble: 3 x 4 ## id code valA valB ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; ## 1 1 a 1 10 ## 2 1 a 2 11 ## 3 1 a 4 13 data.table DT1[id == 1 \u0026amp; code != \u0026quot;c\u0026quot;] ## id code valA valB ## 1: 1 a 1 10 ## 2: 1 a 2 11 ## 3: 1 a 4 13 Question 2 Select valA and valB columns from DF1\nbase R DF1[, c(\u0026quot;valA\u0026quot;, \u0026quot;valB\u0026quot;)] ## valA valB ## 1 1 10 ## 2 2 11 ## 3 3 12 ## 4 4 13 ## 5 5 14 ## 6 6 15 ## 7 7 16 ## 8 8 17 ## 9 9 18 dplyr select(TB1, valA, valB) ## # A tibble: 9 x 2 ## valA valB ## \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; ## 1 1 10 ## 2 2 11 ## 3 3 12 ## 4 4 13 ## 5 5 14 ## 6 6 15 ## 7 7 16 ## 8 8 17 ## 9 9 18 data.table DT1[ , .(valA,valB)] ## valA valB ## 1: 1 10 ## 2: 2 11 ## 3: 3 12 ## 4: 4 13 ## 5: 5 14 ## 6: 6 15 ## 7: 7 16 ## 8: 8 17 ## 9: 9 18 Question 3 Get sum(valA) and sum(valB) for id \u0026gt; 1 as a 1-row, 2-col data.frame\nbase R colSums(DF1[ DF1$id \u0026gt; 1, c(\u0026quot;valA\u0026quot;, \u0026quot;valB\u0026quot;)]) ## valA valB ## 30 66 dplyr TB1 %\u0026gt;% filter(id \u0026gt; 1) %\u0026gt;% select(valA, valB) %\u0026gt;% summarise_all(sum) ## # A tibble: 1 x 2 ## valA valB ## \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; ## 1 30 66 data.table DT1[id \u0026gt; 1, .(sum(valA), sum(valB))] ## V1 V2 ## 1: 30 66 Question 4 Replace valB with valB+1 for all rows where code == “c”\nbase R DF1$valB[DF1$code==\u0026quot;c\u0026quot;] = DF1$valB[DF1$code==\u0026quot;c\u0026quot;] + 1 DF1 ## id code valA valB ## 1 1 a 1 10 ## 2 1 a 2 11 ## 3 1 c 3 13 ## 4 1 a 4 13 ## 5 1 c 5 15 ## 6 2 a 6 15 ## 7 2 a 7 16 ## 8 2 c 8 18 ## 9 2 b 9 18 dplyr TB1 \u0026lt;- TB1 %\u0026gt;% mutate(valB = ifelse(code == \u0026quot;c\u0026quot;, valB + 1,valB)) ## TB1[TB1$code==\u0026quot;c\u0026quot;, ] \u0026lt;- filter(TB1, code==\u0026quot;c\u0026quot;) %\u0026gt;% mutate(valB= valB+1) # alternative solution TB1 ## # A tibble: 9 x 4 ## id code valA valB ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; ## 1 1 a 1 10 ## 2 1 a 2 11 ## 3 1 c 3 13 ## 4 1 a 4 13 ## 5 1 c 5 15 ## 6 2 a 6 15 ## 7 2 a 7 16 ## 8 2 c 8 18 ## 9 2 b 9 18 data.table DT1[code == \u0026quot;c\u0026quot;, valB := valB + 1L] DT1 ## id code valA valB ## 1: 1 a 1 10 ## 2: 1 a 2 11 ## 3: 1 c 3 13 ## 4: 1 a 4 13 ## 5: 1 c 5 15 ## 6: 2 a 6 15 ## 7: 2 a 7 16 ## 8: 2 c 8 18 ## 9: 2 b 9 18 Question 5 Add a new column valC column with values equal to valB^2 - valA^2\nbase R DF1 \u0026lt;- transform(DF1, valC = valB^2 - valA^2) ## DF1$valC \u0026lt;- DF1$valB^2 - DF1$valA^2 # alternate solution DF1 ## id code valA valB valC ## 1 1 a 1 10 99 ## 2 1 a 2 11 117 ## 3 1 c 3 13 160 ## 4 1 a 4 13 153 ## 5 1 c 5 15 200 ## 6 2 a 6 15 189 ## 7 2 a 7 16 207 ## 8 2 c 8 18 260 ## 9 2 b 9 18 243 dplyr TB1 \u0026lt;- mutate(TB1, valC = valB^2 - valA^2) TB1 ## # A tibble: 9 x 5 ## id code valA valB valC ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 1 a 1 10 99 ## 2 1 a 2 11 117 ## 3 1 c 3 13 160 ## 4 1 a 4 13 153 ## 5 1 c 5 15 200 ## 6 2 a 6 15 189 ## 7 2 a 7 16 207 ## 8 2 c 8 18 260 ## 9 2 b 9 18 243 data.table DT1[, valC := valB^2 - valA^2] DT1 ## id code valA valB valC ## 1: 1 a 1 10 99 ## 2: 1 a 2 11 117 ## 3: 1 c 3 13 160 ## 4: 1 a 4 13 153 ## 5: 1 c 5 15 200 ## 6: 2 a 6 15 189 ## 7: 2 a 7 16 207 ## 8: 2 c 8 18 260 ## 9: 2 b 9 18 243 Question 6 Get sum(valA) and sum(valB) grouped by id and code (i.e., for each unique combination of id,code)\nbase aggregate(.~ id + code, DF1, sum) ## id code valA valB valC ## 1 1 a 7 34 369 ## 2 2 a 13 31 396 ## 3 2 b 9 18 243 ## 4 1 c 8 28 360 ## 5 2 c 8 18 260 aggregate(DF1[, c(\u0026quot;valA\u0026quot;, \u0026quot;valB\u0026quot;)], list(DF1$id, DF1$code), sum) ## Group.1 Group.2 valA valB ## 1 1 a 7 34 ## 2 2 a 13 31 ## 3 2 b 9 18 ## 4 1 c 8 28 ## 5 2 c 8 18 dplyr TB1 %\u0026gt;% group_by(id, code) %\u0026gt;% summarise_all(sum) ## # A tibble: 5 x 5 ## # Groups: id [2] ## id code valA valB valC ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 1 a 7 34 369 ## 2 1 c 8 28 360 ## 3 2 a 13 31 396 ## 4 2 b 9 18 243 ## 5 2 c 8 18 260 data.table DT1[, .(SumA=sum(valA), SumB = sum(valB)), by=list(id,code) ] ## id code SumA SumB ## 1: 1 a 7 34 ## 2: 1 c 8 28 ## 3: 2 a 13 31 ## 4: 2 c 8 18 ## 5: 2 b 9 18 Question 7 Get sum(valA) and sum(valB) grouped by id for id \u0026gt;= 2 \u0026amp; code %in% c(“a”, “c”)\nbase aggregate(.~ id , subset(DF1, id \u0026gt;=2 \u0026amp; code %in% c(\u0026quot;a\u0026quot;,\u0026quot;c\u0026quot;), -code), sum) ## id valA valB valC ## 1 2 21 49 656 dplyr TB1 %\u0026gt;% group_by(id) %\u0026gt;% filter(id \u0026gt;=2, code %in% c(\u0026quot;a\u0026quot;, \u0026quot;c\u0026quot;)) %\u0026gt;% select(-code, -valC) %\u0026gt;% summarise_all(sum) ## # A tibble: 1 x 3 ## id valA valB ## \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; ## 1 2 21 49 data.table DT1[ (id\u0026gt;=2) \u0026amp; code %in% c(\u0026quot;a\u0026quot;, \u0026quot;c\u0026quot;) , .(SumA=sum(valA), SumB = sum(valB)), by=id ] ## id SumA SumB ## 1: 2 21 49 Question 8 Replace valA with max(valA)-min(valA) grouped by code\nbase DF1 \u0026lt;- transform(DF1, valA = rep(tapply(valA, code, function(x) diff(range(x)))[code])) DF1 ## id code valA valB valC ## 1 1 a 6 10 99 ## 2 1 a 6 11 117 ## 3 1 c 5 13 160 ## 4 1 a 6 13 153 ## 5 1 c 5 15 200 ## 6 2 a 6 15 189 ## 7 2 a 6 16 207 ## 8 2 c 5 18 260 ## 9 2 b 0 18 243 dplyr TB1 \u0026lt;- TB1 %\u0026gt;% group_by(code) %\u0026gt;% mutate(valA= max(valA)-min(valA)) TB1 ## # A tibble: 9 x 5 ## # Groups: code [3] ## id code valA valB valC ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 1 a 6 10 99 ## 2 1 a 6 11 117 ## 3 1 c 5 13 160 ## 4 1 a 6 13 153 ## 5 1 c 5 15 200 ## 6 2 a 6 15 189 ## 7 2 a 6 16 207 ## 8 2 c 5 18 260 ## 9 2 b 0 18 243 data.table DT1[, \u0026quot;valA\u0026quot; := max(valA)-min(valA), by=code] DT1 ## id code valA valB valC ## 1: 1 a 6 10 99 ## 2: 1 a 6 11 117 ## 3: 1 c 5 13 160 ## 4: 1 a 6 13 153 ## 5: 1 c 5 15 200 ## 6: 2 a 6 15 189 ## 7: 2 a 6 16 207 ## 8: 2 c 5 18 260 ## 9: 2 b 0 18 243 Question 9 Create a new col named valD with max(valB)-min(valA) grouped by code\nbase DF1 \u0026lt;- transform(DF1, valD = by(DF1, code, function(x) max(x$valB) - min(x$valA))[code]) DF1 ## id code valA valB valC valD ## 1 1 a 6 10 99 10 ## 2 1 a 6 11 117 10 ## 3 1 c 5 13 160 13 ## 4 1 a 6 13 153 10 ## 5 1 c 5 15 200 13 ## 6 2 a 6 15 189 10 ## 7 2 a 6 16 207 10 ## 8 2 c 5 18 260 13 ## 9 2 b 0 18 243 18 dplyr TB1 \u0026lt;- TB1 %\u0026gt;% group_by(code) %\u0026gt;% mutate(valD= max(valB)-min(valA)) TB1 ## # A tibble: 9 x 6 ## # Groups: code [3] ## id code valA valB valC valD ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 1 a 6 10 99 10 ## 2 1 a 6 11 117 10 ## 3 1 c 5 13 160 13 ## 4 1 a 6 13 153 10 ## 5 1 c 5 15 200 13 ## 6 2 a 6 15 189 10 ## 7 2 a 6 16 207 10 ## 8 2 c 5 18 260 13 ## 9 2 b 0 18 243 18 data.table DT1[, \u0026quot;valD\u0026quot; := max(valB)-min(valA), by=code] DT1 ## id code valA valB valC valD ## 1: 1 a 6 10 99 10 ## 2: 1 a 6 11 117 10 ## 3: 1 c 5 13 160 13 ## 4: 1 a 6 13 153 10 ## 5: 1 c 5 15 200 13 ## 6: 2 a 6 15 189 10 ## 7: 2 a 6 16 207 10 ## 8: 2 c 5 18 260 13 ## 9: 2 b 0 18 243 18 Question 10 Subset DF1 by DF2 on id,code column. That is, for each row of DF2$id, DF2$code, get valA and valB cols from DF1. Include rows that have no matches as well.\nbase merge(DF1, DF2[, c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)], by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;), all.y=TRUE) ## id code valA valB valC valD ## 1 1 a 6 13 153 10 ## 2 1 a 6 10 99 10 ## 3 1 a 6 11 117 10 ## 4 1 c 5 13 160 13 ## 5 1 c 5 15 200 13 ## 6 2 c 5 18 260 13 ## 7 3 b NA NA NA NA ## 8 3 d NA NA NA NA dplyr right_join(TB1, TB2 %\u0026gt;% select(id, code), by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)) ## # A tibble: 8 x 6 ## # Groups: code [4] ## id code valA valB valC valD ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 1 a 6 10 99 10 ## 2 1 a 6 11 117 10 ## 3 1 c 5 13 160 13 ## 4 1 a 6 13 153 10 ## 5 1 c 5 15 200 13 ## 6 2 c 5 18 260 13 ## 7 3 b NA NA NA NA ## 8 3 d NA NA NA NA ## inner_join to keep only rows present in tibbles, left_join to keep all rows from TB1 ## anti_join to keep only rows from TB1 with no matching rows in TB2 data.table merge(DT1, DT2[ , .(id, code)], all.y = TRUE) ## id code valA valB valC valD ## 1: 1 a 6 10 99 10 ## 2: 1 a 6 11 117 10 ## 3: 1 a 6 13 153 10 ## 4: 1 c 5 13 160 13 ## 5: 1 c 5 15 200 13 ## 6: 2 c 5 18 260 13 ## 7: 3 b NA NA NA NA ## 8: 3 d NA NA NA NA Question 11 Same as (10), but fetch just the first matching row of DF1 for each row of DF2$id, DF2$code. Exclude non-matching rows.\nbase merge(DF1[!duplicated(DF1[, c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)]), ], DF2[, c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)], by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)) ## id code valA valB valC valD ## 1 1 a 6 10 99 10 ## 2 1 c 5 13 160 13 ## 3 2 c 5 18 260 13 dplyr TB1 %\u0026gt;% group_by(id, code) %\u0026gt;% slice(1) %\u0026gt;% ## first entry in each (id, code) group inner_join(select(TB2, id, code), by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)) ## # A tibble: 3 x 6 ## # Groups: id, code [3] ## id code valA valB valC valD ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 1 a 6 10 99 10 ## 2 1 c 5 13 160 13 ## 3 2 c 5 18 260 13 data.table merge(DT1[, .SD[1], by = list(id, code)], ## first entry in each (id, code) group DT2[ , .(id, code)]) ## id code valA valB valC valD ## 1: 1 a 6 10 99 10 ## 2: 1 c 5 13 160 13 ## 3: 2 c 5 18 260 13 Question 12 For every row of DF2$id, DF2$code that matches with DF1’s, update valA with valA*mul.\nbase transform(merge(DF1, DF2, by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;), all.y=TRUE), valA = valA * mul) ## id code valA valB valC valD mul ## 1 1 a 24 13 153 10 4 ## 2 1 a 24 10 99 10 4 ## 3 1 a 24 11 117 10 4 ## 4 1 c 15 13 160 13 3 ## 5 1 c 15 15 200 13 3 ## 6 2 c 10 18 260 13 2 ## 7 3 b NA NA NA NA 5 ## 8 3 d NA NA NA NA 1 dplyr right_join(TB1, TB2, by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)) %\u0026gt;% mutate(valA = valA * mul) ## # A tibble: 8 x 7 ## # Groups: code [4] ## id code valA valB valC valD mul ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;int\u0026gt; ## 1 1 a 24 10 99 10 4 ## 2 1 a 24 11 117 10 4 ## 3 1 c 15 13 160 13 3 ## 4 1 a 24 13 153 10 4 ## 5 1 c 15 15 200 13 3 ## 6 2 c 10 18 260 13 2 ## 7 3 b NA NA NA NA 5 ## 8 3 d NA NA NA NA 1 data.table DT3 \u0026lt;- merge(DT1, DT2, all.y = TRUE)[ , \u0026quot;valA\u0026quot; := valA * mul] show(DT3) ## je ne comprends pas pourquoi il faut utiliser show pour l\u0026#39;affichage ## id code valA valB valC valD mul ## 1: 1 a 24 10 99 10 4 ## 2: 1 a 24 11 117 10 4 ## 3: 1 a 24 13 153 10 4 ## 4: 1 c 15 13 160 13 3 ## 5: 1 c 15 15 200 13 3 ## 6: 2 c 10 18 260 13 2 ## 7: 3 b NA NA NA NA 5 ## 8: 3 d NA NA NA NA 1 Question 13 Add a new column val to DF1 with values from DF2$mul where DF2$id, DF2$code matches with DF1’s. Rows that don’t match should have NA.\nbase transform(merge(DF1, DF2, by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;), all.x = TRUE, sort = FALSE), mul = mul) ## id code valA valB valC valD mul ## 1 1 a 6 13 153 10 4 ## 2 1 a 6 10 99 10 4 ## 3 1 a 6 11 117 10 4 ## 4 1 c 5 13 160 13 3 ## 5 1 c 5 15 200 13 3 ## 6 2 c 5 18 260 13 2 ## 7 2 b 0 18 243 18 NA ## 8 2 a 6 15 189 10 NA ## 9 2 a 6 16 207 10 NA dplyr left_join(TB1, TB2, by = c(\u0026quot;id\u0026quot;, \u0026quot;code\u0026quot;)) ## # A tibble: 9 x 7 ## # Groups: code [3] ## id code valA valB valC valD mul ## \u0026lt;int\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;int\u0026gt; ## 1 1 a 6 10 99 10 4 ## 2 1 a 6 11 117 10 4 ## 3 1 c 5 13 160 13 3 ## 4 1 a 6 13 153 10 4 ## 5 1 c 5 15 200 13 3 ## 6 2 a 6 15 189 10 NA ## 7 2 a 6 16 207 10 NA ## 8 2 c 5 18 260 13 2 ## 9 2 b 0 18 243 18 NA data.table merge(DT1, DT2, all.x = TRUE) ## id code valA valB valC valD mul ## 1: 1 a 6 10 99 10 4 ## 2: 1 a 6 11 117 10 4 ## 3: 1 a 6 13 153 10 4 ## 4: 1 c 5 13 160 13 3 ## 5: 1 c 5 15 200 13 3 ## 6: 2 a 6 15 189 10 NA ## 7: 2 a 6 16 207 10 NA ## 8: 2 b 0 18 243 18 NA ## 9: 2 c 5 18 260 13 2 ","date":1508716800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1508716800,"objectID":"1802e5f9ce10de33863fa271b330fcf3","permalink":"http://stateofther.github.io/post/data.table/","publishdate":"2017-10-23T00:00:00Z","relpermalink":"/post/data.table/","section":"post","summary":"L’atelier du jour avait pour objectif la découvert du package data.table au travers d’exercises proposés lors de la dernière édition de UseR. Les slides avec les énoncés sont disponibles ici.","tags":["tidy","data.table","dplyr"],"title":"Exercices autour de data.table","type":"post"},{"authors":null,"categories":null,"content":"","date":1505080800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1505080800,"objectID":"30f145d83d0850607f02c8d4c21f2fec","permalink":"http://stateofther.github.io/project/finistr17/","publishdate":"2017-09-11T00:00:00+02:00","relpermalink":"/project/finistr17/","section":"project","summary":"Mini poly bookdown résumant les activités de la semaine d'ateliers à Roscoff 2017","tags":["bootcamp"],"title":"FinistR'17","type":"project"}]