Look ma! No typing! Autorunning code on R startup
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Regular readers may know that I often make R-based GUIs. They’re great for giving non-technical users safe and easy access to statistical models. The safety comes from the restrictions of a GUI: you can limit what the users does more easily than with a command line, helping to reduce the number of opportunities for bad science. My tool of choice for GUI building is John Verzani’s set of gWidgets packages; see my introduction and comparison with Deducer.
Since the target audience is non-technical, an important aim is to reduce the amount of typing at the R command prompt. Typically, I wrap the GUI into package, and have a single function call to load the GUI, so the users will have to start R, then type something like
library(myGui) gui <- runTheGui() #Here's an example GUI to play with now runTheGui <- function() { win <- gwindow("Test", visible = FALSE) rad <- gradio(letters[1:4], cont = win) visible(win) <- TRUE focus(win) list(win = win, rad = rad) }
Typing two lines isn’t too onerous, but the ideal situation would involve no typing at all. That is, you double click a shortcut that opens R and then the GUI. With a little help from the internet, I have two solutions. Which one is best depends upon your setup.
The first solution was suggested to me by my collaborators Simon and Mark over at Drunks & Lampposts, who got it from Greg Snow. I’ve refined the technique to make it simpler.
There are two tricks involved. Firstly, when R (at least R GUI; Eclipse, RStudio, emacs, etc. may require configuration) starts up, by default it will run a function named .First
, if that function exists. So our first task is to put those previous lines of code inside that function.
.First <- function() { library(myGui) gui <<- runTheGui() }
Then, we save that function into an R binary workspace file.
save(.First, file = "~/Desktop/runTheGui.RData")
The second trick is that (assuming your operating system has been configured correctly), double-clicking a .RData
file will start R GUI, loading said .RData
file, and running the contents of that .First
function.
So all the user needs to do is double click the RData file, and the GUI will run.
This is exactly what we wanted, but it has a small drawback in that R GUI isn’t available on all platforms. Also, if you really don’t want users to type things, then you may not want R GUI at all. In that case, using Rscript
(as suggested by Dirk Eddelbuettel) is a better solution. Rscript
is a little bit like batch mode. It open R in a terminal, runs a script, then closes R again. So for this solution, we need to create a script. This time we don’t need to wrap the contents inside a function. We do need to add something to the end of the script to prevent R closing down once the script has run, such as a check that the window is still open. (Note that since the R console won’t be available this time, this solution isn’t that useful for non-GUI purposes.)
library(myGui) gui <- runTheGui() while(isExtant(gui$win)) Sys.sleep(1)
Now to get the GUI running, you create a shortcut to Rscript, with the script file as an argument. Change the path to R and to the script file as appropriate.
"%ProgramW6432%\R\R-2.15.1\bin\Rscript.exe" "path/to/your/script/runTheGui.R"
And voila! We have a GUI running in R, again from a simple, single double-click, and this time R closes itself down when the GUI closes.
Tagged: gui, gWidgets, r, startup
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.