• R experts, for all your R needs

    R experts, for all your R needs

Shiny applications (design and deployment)

Application and dashboard using Shiny framework

R server and infrastructure

Rstudio server, Rconnect, Shinyproxy, Shiny server…

Code and R scripts optimization

Performance, Maintainability & Reusability

R Software Engineering

Package creation, algorithm production, ...

Remote trainings and certification

Learn R with us from the confort of your home/office!

Open-source contributions

Our open-source contributions to the R community

"R experts at your disposal"

A team of R consultants

At ThinkR we are passionate about R. We are a team of developers and R consultants, with solid knowledge and skills in everything R-related — development, application deployment, or infrastructure .

Contact us if you need a team of experts to carry out your R projects:

  • Package creation
  • Implementation of good development practices
  • Code optimization
  • Shiny application
  • Installation and configuration of Rstudio Connect
  • Rstudio server or ShinyProxy with Docker
  • Advanced R training

2024-12-18 / Colin Fay

Introducing Rlinguo, a native mobile app that runs R

TL;DR Rlinguo is a groundbreaking mobile application that uses R in the backend to handle its business logic. Available for download now: iOs on the AppStore Android on the Google Play Store Yes, you read that right: the future is now, and we can run R on your mobile phone. Once upon a time… I’ve been building web apps with ...

2024-12-09 / Colin Fay

Parallel and Asynchronous Programming in Shiny with future, promise, future_promise, and ExtendedTask

Illustration via ChatGPT. There are three hard things in computer science. One is making ChatGPT write “Invalidation” correctly on an image. ​ There’s a saying that goes: “There are only two hard things in computer science: cache invalidation and naming things.” Well, I’d argue there are actually three: 2. Cache Invalidation 1. Naming things 3. Asynchronous Computing   Yes, that’s ...

2024-11-22 / Arthur Bréant

Signature.py: Award-Winning Application at the 2024 Shiny Contest

🏆 We are excited to announce that {signature.py} is the grand winner of the 2024 Shiny Contest in the category ‘Best Shiny Application with Python’! This year, Posit relaunched the Shiny Contest, a competition dedicated to the development of Shiny applications. Participants are asked to create a personal or professional application that addresses a specific problem. The applications are then ...

2024-11-19 / Colin Fay

You’ve Been Waiting for Native Mobile Apps with R? The Wait Is Over.

webR, and the next generation of app with R For the past couple of months, I’ve been sharing how webR will transform the way we build apps with R inside. If you’re unfamiliar, webR is a WebAssembly compilation of R. In simpler terms, it enables R to run within JavaScript environments. If you are familiar, you know it’s a bit ...

2024-10-14 / Yohann Mansiaux

Beyond Functions: How to Enrich an R Package with Data

As package developers, we often focus on custom functions, their documentation, and unit testing. To provide a more complete user experience, it can be helpful to include data within the package. Here’s everything you need to know! If you’re not familiar with unit testing, we recommend reading our article on the subject: : https://rtask.thinkr.fr/expectations-verified-dive-into-the-world-of-unit-tests-with-expect_/ Short on time? Here’s the gist ...

2024-10-04 / Murielle

Expectations, Verified! Dive into the World of Unit Tests with expect_*()

Unit tests are essential in the development of an R package. They ensure that your functions work as expected while protecting you from regressions when you improve or modify your code. Thanks to the {testthat} package, writing and automating tests in R becomes simple and intuitive. At the core of this approach are the expect_*() functions, which play a central ...

2024-09-03 / Yohann Mansiaux

Boost your shiny app with sparkling data visualizations: a deep dive into Chart.js JavaScript library

Let’s continue our exploration of integrating JavaScript code into a {shiny} application! We will show how to move beyond the classic graphs produced in base R or with {ggplot2} to explore the interactive dataviz production libraries of JavaScript, particularly the Chart.js library. If you missed our first article on integrating JavaScript libraries into a {shiny} application I invite you to ...

2024-08-26 / Colin Fay

{golem} 0.5.0 is now available

Header image generated by ChatGPT We are thrilled to announce the release of {golem} version 0.5.0! This update comes packed with new features, enhancements, and bug fixes that will streamline your Shiny app development process. You can download the latest version from your favorite CRAN repository, or by running the following command in R: pak::pak( “thinkr-open/[email protected]” ) What’s New in This Version? ...

gtlabr hex logo inside a rectangle

2024-05-17 / Sébastien Rochette

gitlabr V2.1.0 – gitlab-ci with ‘pak’ and functions to deal with groups on GitLab

A lot of cleanups, new features, and bug fixes for this new version of ‘gitlabr’. You will find brand-new CI/CD templates and functions to manage GitLab groups from R. Brand new gitlab-ci with ‘pak’, ready to use The template for checking R packages uses {pak} for dependency management. You will no longer have issues with missing system dependencies. You should ...

2024-04-29 / Yohann Mansiaux

Pimping your shiny app with a JavaScript library : an example using sweetalert2

You think that some of the components of {shiny} are not very functional or downright austere? Are you looking to implement some feature in your app but it is not available in the {shiny} toolbox? Take a look at JavaScript! JavaScript is a very popular programming language that is often used to add features to web pages. With HTML and ...

2024-02-21 / Vincent Guyader

Performance Optimization in R: An Example Using Memoise

Context Whether during the (training sessions) I can provide or the (coaching) sessions I can conduct, there is often a moment when I go on a long rant about the power and usefulness of caching. How awesome it is, not so complicated to set up, and super interesting. The last time I gave a presentation was to talk about ({targets}), ...

2024-02-16 / Swann Floc’hlay

Tame your namespace with a dash of suggests

We’ve all felt it, that little wave of shiver through our skin as we watch the check of our newest commit running, thinking “Where could this possibly go wrong?”. And suddenly, the three little redeeming ticks 0 errors ✔ | 0 warnings ✔ | 0 notes ✔ Allelhuia! 🎉 We git commit the whole thing, we git push proudly our ...

banner with sticker logo of fusen package

2023-12-12 / Sébastien Rochette

‘fusen’ v0.6.0 (beta): a new Rmd/Qmd parser with ‘lightparser’ to try before release

{fusen} now relies on {lightparser} to detect the different parts of a Rmd or a Qmd file before inflating your flat file as a R package. Before the release on CRAN, I need you to test the development version and tell me if there are any edge cases with your flat files. TL;DR Please try the pre-release version of {fusen} ...

2023-12-04 / Florence Mounier

{checkhelper} is on CRAN: so you don’t have to be afraid to run a check

You’ve put together a great package that you’re proud of and you’d like to share it with the R community? Maybe even submit it to CRAN? Before you do that, you know that a few checks are recommended… yes you do! but devtools::check() returns 7 warnings, 12 notes and 200 unclear lines so…. So you’ve come to the right place! ...

fusen - Gotta inflate' em all

2023-07-21 / Yohann Mansiaux

fusen v0.5: Gotta inflate ’em all !

No more amnesia for {fusen}! With v0.5, it now has “memory”, allowing you to inflate all your flat files simultaneously. The aim of this latest version of {fusen} is to provide an ever smoother package development experience, for both novice and experiences users. {fusen} continues to make life easier for package creators. One of the main changes in this new ...

2023-06-05 / Vincent Guyader

Mastering file download in shiny

But why does downloadHandler now return an empty file!? DownloadHandler context When we start working with {shiny}, we often reach a point where it is necessary to offer the user the option to download a document generated by the application. This document can be a PDF report, a PNG or JPEG image, or anything else. The appropriate function for this ...