You are currently browsing winstonchang’s articles.

Shiny version 0.11 is available now! Notable changes include:

  • Shiny has migrated from Bootstrap 2 to Bootstrap 3 for its web front end. More on this below.
  • The old jsliders have been replaced with ion.rangeSlider. These sliders look better, are easier for users to interact with, and support updating more fields from the server side.
  • There is a new passwordInput() which can be used to create password fields.
  • New observeEvent() and eventReactive() functions greatly streamline the use of actionButton and other inputs that act more like events than reactive inputs.

For a full set of changes, see the NEWS file. To install, run:


We’ve also posted an article with notes on upgrading to 0.11.

Bootstrap 3 migration

In all versions of Shiny prior to 0.11, Shiny has used the Bootstrap 2 framework for its web front-end. Shiny generates HTML that is structured to work with Bootstrap, and this makes it easy to create pages with sidebars, tabs, dropdown menus, mobile device support, and so on.

The Bootstrap development team stopped development on the Bootstrap 2 series after version 2.3.2, which was released over a year ago, and has since focused their efforts on Bootstrap 3. The new version of Bootstrap builds on many of the same underlying ideas, but it also has many small changes – for example, many of the CSS class names have changed.

In Shiny 0.11, we’ve moved to Bootstrap 3. For most Shiny users, the transition will be seamless; the only differences you’ll see are slight changes to fonts and spacing.

If, however, you customized any of your code to use features specific to Bootstrap 2, then you may need to update your code to work with Bootstrap 3 (see the Bootstrap migration guide for details). If you don’t want to update your code right away, you can use the shinybootstrap2 package for backward compatibility with Bootstrap 2 – using it requires adding just two lines of code. If you do use shinybootstrap2, we suggest using it just as an interim solution until you update your code for Bootstrap 3, because Shiny development going forward will use Bootstrap 3.

Why is Shiny moving to Bootstrap 3? One reason is support: as mentioned earlier, Bootstrap 2 is no longer developed and is no longer supported. Another reason is that there is dynamic community of actively-developed Bootstrap 3 themes. (Themes for Bootstrap 2 also exist, but there is less development activity.) Using these themes will allow you to customize the appearance of a Shiny app so that it doesn’t just look like… a Shiny app.

We’ve also created a package that make it easy to use Bootstrap themes: shinythemes. Here’s an example using the included Flatly theme: flatly

See the shinythemes site for more screenshots and instructions on how to use it.

We’re also working on shinydashboard, a package that makes it easy to create dashboards. Here’s an example dashboard that also uses the leaflet package.


The shinydashboard package still under development, but feel free to try it out and give us feedback.

ggvis 0.4 is now available on CRAN. You can install it with:


The major features of this release are:

  • Boxplots, with layer_boxplots()
chickwts %>% ggvis(~feed, ~weight) %>% layer_boxplots()

ggvis box plot

  • Better stability when errors occur.
  • Better handling of empty data and malformed data.
  • More consistent handling of data in compute pipeline functions.

Because of these changes, interactive graphics with dynamic data sources will work more reliably.

Additionally, there are many small improvements and bug fixes under the hood. You can see the full change log here.

Our first public release of ggvis, version 0.3, is now available on CRAN. What is ggvis? It’s a new package for data visualization. Like ggplot2, it is built on concepts from the grammar of graphics, but it also adds interactivity, a new data pipeline, and it renders in a web browser. Our goal is to make an interface that’s flexible, so that you can compose new kinds of visualizations, yet simple, so that it’s accessible to all R users.

Update: there was an issue affecting interactive plots in version 0.3. Version fixes the issue. The updated source package is now on CRAN, and Windows and Mac binary packages will be available shortly.


ggvis integrates with Shiny, so you can use dynamic, interactive ggvis graphics in Shiny applications. We hope that the combination of ggvis and Shiny will make it easy for you to create applications for interactive data exploration and presentation. ggvis plots are inherently reactive and they render in the browser, so they can take advantage of the capabilities provided by modern web browsers. You can use Shiny’s interactive components for interactivity as well as more direct forms of interaction with the plot, such as hovering, clicking, and brushing.

ggvis works seamlessly with R Markdown v2 and interactive documents, so you can easily add interactive graphics to your R Markdown documents:

shiny-doc-ggvis  ggvis_density

And don’t worry — ggvis isn’t only meant to be used with Shiny and interactive documents. Because the RStudio IDE is also a web browser, ggvis plots can display in the IDE, like any other R graphics:

ggvis in RStudio IDE

There’s much more to come with ggvis. To learn more, visit the ggvis website.

Please note that ggvis is still young, and lacks a number of important features from ggplot2. But we’re working hard on ggvis and expect many improvements in the months to come.

Shiny version 0.4.0 is now available on CRAN. The most visible change is that the API has been slightly simplified. Your existing code will continue to work, although Shiny will print messages about how to migrate your code. Migration should be straightforward, as described below. It will take a bit of work to switch to the new API, but we think it’s worth it in the long run, because the new interface is somewhat simpler, and because it offers a better mapping between function names and reactive programming concepts.

We’ve also updated the Shiny tutorial to reflect the changes, and we’ve also added a some new content explaining Shiny’s reactive programming model in depth. If you want to have a better understanding of how Shiny works, see the sections under Understanding Reactivity, starting with the Reactivity Overview.

Another new feature is that Shiny now suspends outputs when they aren’t visible on the user’s web browser. For example, if your Shiny application has multiple tabs or conditional panels, Shiny will only run the calculations and send data for the currently-visible tabs and panels. This new feature will reduce network traffic and computational load on the server, resulting in a faster application.

Read the rest of this entry »

Version 0.3.0 of Shiny is now available on CRAN. This version of Shiny has several new features and bug fixes. Some of the changes are under the hood: for example, Shiny now uses a more efficient algorithm for scheduling the execution of reactive functions. There are also some user-facing changes: for example, the new runGitHub() function lets you download and run applications directly from a GitHub repository.

We’ve updated the tutorial page with documentation about these and other features. For a full list of changes, see the the NEWS file.

You can install the new version of Shiny with install.packages('shiny').

We’re pleased to announce new versions of ggplot2 (0.9.3) and plyr (1.8).  To get up and running with the new versions, start a clean R session without ggplot2 or plyr loaded, and run install.packages(c("ggplot2", "gtable", "scales", "plyr")). Read on to find out what’s new.

ggplot2 0.9.3

Most of the changes version 0.9.3 are bug fixes. Perhaps the most visible change is that ggplot will now print out warning messages when you use stat="bin" and also map a variable to y. For example, these are valid:

ggplot(mtcars, aes(wt, mpg)) + geom_bar(stat = "identity")
ggplot(mtcars, aes(cyl)) + geom_bar(stat = "bin")

But this will result in some warnings:

ggplot(mtcars, aes(wt, mpg)) + geom_bar(stat = "bin")
# The default stat for geom_bar is "bin", so this is the same as above:
ggplot(mtcars, aes(wt, mpg)) + geom_bar()

The reason for this change is to make behavior more consistent – stat_bin generates a y value, and so should not work when you also map a value to y.

For a full list of changes, please see the NEWS file.

plyr 1.8

Version 1.8 has 28 improvements and bug fixes. Among the most prominent:

  • All parallel plyr functions gain a .paropts argument, a list of options that is passed onto foreach which allows you to control parallel execution.
  • progress_time is a new progress bar contributed by Mike Lawrence estimates the amount of time remaining before a job is complete
  • The summarise() function now calculates columns sequentially, so you can calculate new columns from other new columns, like this:
       summarise(mtcars, x = disp/10, y = x/10)

    This behavior is similar to the mutate() function. Please be aware that this could change the behavior of existing code, if any columns of the output have the same name but different values as columns in the input. For example, this will result in different behavior in plyr 1.7 and 1.8:

       summarise(mtcars, disp = disp/10, y = disp*10)

    In the old version, the y column would equal mtcars$disp * 10, and in the new version, it would equal mtcars$disp.

  • There are a number of performance improvements: a*ply uses more efficient indexing so should be more competitive with apply; d*ply, quickdf_df and idata.frame all have performance tweaks which will help a few people out a lot, and a lot of people a little.

For a full list of changes, please see the NEWS file.


Get every new post delivered to your Inbox.

Join 12,319 other followers