🇫🇷 Version française 🔦 Un bel éclairage de Mickaël CANOUIL, biostatisticien senior au sein de notre équipe data sciences, sur la conception d'outils accessibles aussi bien aux profils techniques que non techniques. ✅ C'est un bon rappel que des pratiques d'ingénierie solides rendent les analyses complexes accessibles à tous les acteurs d'un projet. 💎C'est le niveau d'expertise que nous apportons à chaque mission, et c'est exactement ce que vous pouvez attendre en travaillant avec nous. 🇬🇧 English below 🔦 Great insight from Mickaël CANOUIL, Senior Biostatistician on our data sciences team, on designing tools that serve both technical and non-technical users alike. ✅ It is a good reminder that strong engineering practices make complex analysis accessible to everyone involved in a project. 💎This is the calibre of expertise we bring to every engagement, and it is exactly what you can expect if you work with us. #DataScience #Biostatistics #Analytics #LifeSciences #UserCentricDesign #Innovation #RPackage
My day job at Alsinova (Astek) is to conduct statistical analysis of omics data, and most of it is spent writing R code through packages, Shiny apps, scripts, things used by everyone from data scientists to clinicians who never open a terminal. The hard part is not the analysis. It is keeping the same logic consistent when it has to run in a batch pipeline, an interactive app, and a report all at once, and for various users with different levels of R literacy. So I wrote down the package shape I settled on in my recent projects, as a small worked demo: 'acme.toolkit'. One S7 object model is the shared currency. 'Dataset', 'AnalysisResult', and 'Project' are typed classes with validators. Verbs like 'analyse()' are S7 generics: 'analyse(dataset)' and 'analyse(project)' look identical at the call site, and S7 routes each to the right method. No type-checking branches in the calling code. Four consumers draw from that one model. - A config-driven 'targets' pipeline. Non-developers edit a YAML file that reads like plain English; the package owns the code and generates '_targets.R' from it. - A bundled Quarto extension. One '_brand.yml' feeds three formats: 'acme-html', 'acme-typst', 'acme-revealjs'. Swap the palette once and every output follows. - A modular Shiny app. The modules call the same 'analyse()' generic the pipeline calls, so 'mod_analysis' drops into any Shiny app as a public interface, no re-implementing. The payoff is one place to change things. Update the analysis logic once and the terminal, the browser, and the PDF all pick it up. There are still some rough edges with S7, especially with generics, method dispatch, and documentation with roxygen2, but the benefits outweigh the costs in my use cases. Blog Post: https://lnkd.in/eSm4Qb2S #RStats #Shiny #Quarto #OpenSource #DataScience