Welcome

This book is still under active development and intended for a Q2 release in the R Series by Chapman & Hall.

Disclaimer

This book is not an HTML/Javascript/CSS course and won’t make you become a web developer! Instead, it provides a survival kit to customize Shiny. I am sure however that readers will want to explore more about these topics.

Is this book for me?

Before going further, the reader must:

  • Be comfortable with R structures, functional and object oriented programming (R6)
  • Have solid knowledge of Shiny

Basic knowledge in HTML and JavaScript is a plus but not mandatory.

If you fulfill the above prerequisites, you should read this book if you answer yes to the following questions:

  • Do you want to know how to develop shiny apps with a professional look and feel?
  • Have you ever wondered how to design new input widgets?
  • Are you simply curious about what happens under the hood?

Learning objectives

This book will help you to:

  • Manipulate Shiny tags from R to create custom layouts
  • Harness the power of CSS and JavaScript to quickly design apps standing out from the pack
  • Discover the steps to import and convert existing web frameworks like Bootstrap 4, framework7 and more
  • Learn how Shiny internally deals with inputs
  • Learn more about less documented Shiny mechanisms (websockets, sessions, …)

Extra material

Novartis associates Mustapha Larbaoui and David Granjon gave a workshop entitled “Advanced User Interfaces for Shiny Developers” at the latest 2020 virtual e-Rum conference whose detailed agenda is available here. This two hours workshop takes a lot of inspiration on this book. An RStudio Cloud dedicated project is deployed here and slides are located here.

Acknowledgements

  • I am very grateful to Douglas Robinson for proof reading the book and fixing many typos it contained
  • A special thanks to my friends John and Victor for contributing to RinteRface
  • Thanks to the eRum organizers for inviting me to the virtual e-Rum2020 conference
  • RinteRface and this book won’t exist without the amazing R community. Thanks for their valuable feedback

Packages

library(shiny)
## Warning: package 'shiny' was built under R version 3.6.2
library(shinydashboard)
## 
## Attaching package: 'shinydashboard'
## The following object is masked from 'package:graphics':
## 
##     box
library(cascadess)
## 
## Attaching package: 'cascadess'
## The following object is masked from 'package:graphics':
## 
##     text
library(htmltools)
## Warning: package 'htmltools' was built under R version 3.6.2
library(purrr)
## Warning: package 'purrr' was built under R version 3.6.2
library(magrittr)
## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
## 
##     set_names
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.2
## 
## Attaching package: 'ggplot2'
## The following object is masked from 'package:cascadess':
## 
##     margin
library(thematic)
library(fresh)
library(testthat)
## 
## Attaching package: 'testthat'
## The following objects are masked from 'package:magrittr':
## 
##     equals, is_less_than, not
## The following object is masked from 'package:purrr':
## 
##     is_null
library(jstools)
library(scales)
## Warning: package 'scales' was built under R version 3.6.2
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.6.2
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:testthat':
## 
##     matches
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(apexcharter)
## Warning: package 'apexcharter' was built under R version 3.6.2
library(shinyWidgets)
## Warning: package 'shinyWidgets' was built under R version 3.6.2