# A first go at ‘manipulate’ in RStudio

August 26, 2011
By

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:

Code:
# Adapting Richie Cotton's gWidgettcltk example to RStudio's manipulate

library("ggplot2")
library("manipulate")

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

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.