Site icon R-bloggers

A first go at ‘manipulate’ in RStudio

[This article was first published on Christophe Ladroue » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Something I’m missing from R (especially coming from Mathematica) is the ability to quickly build interactive graphs, which I find very useful for getting a good intuition of the impact of parameters on a mathematical function.
Richie Cotton’s post about interactive plots in R gave me an incentive to have a go at the manipulate package in RStudio.

I adapted Richie’s example (go to his page to download his data and example) to manipulate and I have to say I have been impressed by how easy and fast it is to put something together.
Here is the whole script that replicates the example:

Selec All Code:
# Adapting Richie Cotton's gWidgettcltk example to RStudio's manipulate
# C. Ladroue
 
library("ggplot2")
library("manipulate")
 
chromium <- read.csv("chromium.csv")
nickel <- read.csv("nickel.csv")
 
manipulate({
  p<- ggplot(data, aes(air, bm)) + geom_point()
  p+facet_grid(facet)+scale_x_continuous(trans=xScale)+scale_y_continuous(trans=yScale)
  },
  yScale=picker("Linear"="identity","Log"="log10",label="Y Scale Transformation"),
  xScale=picker("Linear"="identity","Log"="log10",label="X Scale Transformation"),
  facet=picker( "None" = ". ~ .", "RPE" = ". ~ rpe","Welding type" = ". ~ welding.type","RPE and Welding type" = "rpe ~ welding.type",initial="None",label="Faceting"),
  data=picker("Chromium"=chromium,"Nickel"=nickel,label="Datasets")
)

And the result is as expected: a graph with added controls. (click to view the whole image)

As you can see from the code, this is extremely readable. The only control type I’ve had to use is picker, which takes a list of labels, followed by an optional value. It’s this value that will be passed on to the assigned variable. The label appearing on the form can also be changed with label=. Other available controls are slider and checkbox. There is no text control at the moment, so I couldn’t replicate the ‘title’ box from Richie’s example.

I’ve used the TclTk package before and while it worked, it was a bit too cumbersome to be used routinely. By contrast, manipulate allows for a very easy and fast setup, with little to no overhead. This comes at the expense of being restricted to RStudio, but since this is my IDE of choice, I’m fine with that.

This is only a quick and dirty attempt at manipulate and there are things I’d like to change; in particular, I’m fairly sure that the line

Selec All Code:
data=picker("Chromium"=chromium,"Nickel"=nickel,label="Datasets")

is an unnecessary memory hog, due to the passing of the 2 data frames to picker. A better choice would be to only pass a string and check its value in the expression that generates the plot.

To leave a comment for the author, please follow the link and comment on their blog: Christophe Ladroue » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.