An Introduction to GUI Programming using R - Meetup

slimwhimperSoftware and s/w Development

Nov 3, 2013 (3 years and 1 month ago)

76 views

An Introduction to GUI Development
using R


Overview


Introduction


R Interfaces


GUIs for programming



Programming for GUIs


GUIs for teaching how to program


GUI task
-
oriented applications


gWidgets package



Integrating R into other applications


GUI deployment

Introduction

R Interfaces/Console alternatives


RStudio


Programmed in C++ and GTK+


JGR


Java


Revolution R Productivity Environment
(RPE)


MS Visual Studio


Red
-
R (Open Source visual
programming for R


SciViews (extends Komodo edit)

GUIs for Programming (code
editors)


R internal editor (on Mac!)


Emacs + ESS


Eclipse + StatET


Gvim/Vim
-
R


Notepad++ / NppToR


WinEdt/RWniEdt ($30!!!)


Tinn
-
R (MS Windows only)


jEdit (doesn't pass code to R)

GUIs to learn programming


R Commander (Rcmdr package)


Satistical analysis functions



RKWard (Linux only)

Poll from KDnuggets.com (data miners!)

GUI Programming using R


gWidgets package



written by J. Verzani



“gWidgets provides a toolkit
-
independent API for building
interactive GUIs.”



At least one of gWidgetstcltk, gWidgetsRGtk2, gWidgetsQt (on
R
-
Forge only) and qWidgetsrJava needs to be installed.”



i.e. GUI toolkits must be installed (except Tcltk, pre
-
installed,
default)



the user can switch between GUI toolkits with relative
ease and can write code in a toolkit independent way


Well, not quite


GTK+ toolkit


www.gtk.org

gWidgets

functions

GUI contruction using gWidgets


Use
containers

(in ggroup, gwindow, gnotebook functions) to nest widgets


Handlers

i.e. event handling, define the executed operation


Handlers can be added after the GUI is created e.g. addHandlerClicked(…)


Drag
-
and
-
drop is also featured in gWidgets




Demo....


library(gWidgets)

options("guiToolkit"="RGtk2")


win <
-

gwindow("Hello World, ad nauseum", visible=TRUE)

group <
-

ggroup(horizontal = FALSE, container=win)


obj <
-

gbutton("Hello...",container=group, handler = function(h,...)
gmessage("world"))

obj <
-

glabel("Hello...", container =group,handler = function(h,...)
gmessage("world"))

obj <
-

gcombobox(c("Hello","world"), container=group)

obj <
-

gedit("Hello world", container=group)

obj <
-

gtext("Hello world", container=group, font.attr=list(style="bold"))

Sample Problem


Survey conducted to see changes in HIV and
non
-
HIV services in sub
-
Saharan Africa


Conducted across health centres & hospitals, also
individual health
-
worker data, in several sub
-
saharan Africa countries


Relatively small questionnaire resulting in
800 variables!


Variables names themselves are not very useful


e.g. “Q001”. Great scope for programming error


Variable labels (the actual questions) contain the
information on what is collected


With the concept of variable names dropped, an
interactive GUI might work better with variable
labels than programming!


Solution


Create new sets of labels


which work as indexes


These can be used to filter, manage and
analyze data

-

Restructuring of data not required


Begin with a search & replace dialogue
screen


How would you design it (so that it would
be a better option than just using
grep

or
regexpr)
?


Demo...






Deducer


“An intuitive, cross
-
platform graphical data
analysis system”



Deducer is based upon rJava and provides
access to the Java Swing Network


Related Packages

Description

DeducerExtras

Additional dialogs and functions for Deducer

DeducerPlugIn Example

Deducer Plug
-
in Example

DeducerPlugInScaling

Reliability and factor analysis plugin

DeducerSpatial

Deducer for spatial data analysis

DeducerSurvival

Add Survival Dialogue to Deducer

DeducerText

Deducer GUI for Text Data

gWidgets versus Deducer



Deducer has a slightly lower level library, but
more flexible and compatible with JGR



Deducer requires you to explicitly specify
positions of widgets, and is a little more
verbose when you come to add event
handling logic



Visit
www.r
-
bloggers.com

for a discussion

Other R GUI packages and tools
(which I know little about!)


PBS (Pacific Biological Station) packages


Rattle (data mining GUI)


Brodgar (used for class
-
room teaching etc.)


pmg (poor man’s GUI, similar to Rcmdr)


Current List of Packages with
tools for GUI development or
utilize a programmed GUI*

*as of January 2013

Package

description

ade4TkGUI

GUI for ade4 package

AtelieR

Basic statistical inference & bayesian analysis

BiodiversityR

Biodiversity, suitability, community ecology analysis

biOpsGUI

Basic image operations

BiplotGUI

Interactive Biplots in R

CADStat

Statistical methods useful for causal assessment

caGUI

A Tcl/Tk GUI for the functions in the ca package

cncaGUI

Canonical Non
-
symmetrical Correspondence Analysis

DALY

Stochastic DALY calculations

detrendeR

Start the detrendeR Graphical User Interface (GUI)

digeR

GUI tool for analyzing 2D DIGE data

GGEBiplotGUI

GGEBiplotGUI: Interactive GGE Biplots in R

GrapheR

Multi
-
platform GUI for drawing customizable graphs

MDSGUI

A GUI for interactive MDS in R

MergeGUI

A GUI for Merging Datasets in R

Metabonomic

GUI for Metabonomic Analysis

Package

description

migui

Graphical User Interface of the mi Package

MissingDataGUI

A GUI for Missing Data Exploration

MSeasyTkGUI

A GUI for Missing Data Exploration

multibiplotGUI

Multibiplot Analysis in R

mutossGUI

A graphical user interface for the MuToss Project

PBSadmb

ADMB for R Using Scripts or GUI

PMSddesolve

Solver for Delay Differential Equations

PBSmapping

Mapping Fisheries Data and Spatial Analysis Tools

PBSmodelling

Interact with Models, Explore Data, Dynamic Presentations

playwith

A GUI for interactive plots using GTK+

pmg

Poor Man's GUI

ProgGUIinR

book "Programming Graphical User Interfaces in R"

QCAGUI

QCA Graphical User Interface

R2STATS

Fit and compare GLM and GLMM in R

RandForestGUI

Random Forests

RenextGUI

GUI for Renext

Package

description

ResearchMethods

GUIs to help teach statistics to non
-
statistics students

reshapeGUI

A GUI for the reshape2 and plyr packages

RPMG

Interactive R analysis sessions

RunuranGUI

A GUI for the UNU.RAN random variate generators

Rz

GUI Tool for Data Management like SPSS or Stata

sculpt3d

A simple toolbar GUI for brushing RGL plots

sdcMicroGUI

Graphical user interface for package sdcMicro

SeqGrapheR

Graph based visualization of cluster of DNA seq reads

Sim.DiffProcGUI

Simulation of Diffusion Processes

speedR

A GUI based importing and filtering tool

TGUICore

Teaching GUI
-

Core functionality

TGUITeaching

Teaching GUI
-

prototype

tourrGUI

A Tour GUI using gWidgets

traitr

creating GUIs (traits UI module for python)

WMCapacity

Bayesian working memory models

x12GUI

X12
-

Graphical User Interface

Package

description

Common JavaJars

Useful libraries for building a Java based GUI

fgui

Function GUI

miniGUI

tktcl quick and simple function GUI

Considerations in GUI
development & deployment


Which Widget library?


GTK+, Java, Qt?



Program the UI or use a UI designer?


e.g. QtDesigner



Choice of software for GUI deployment?


R (gWidgets package etc.)


Python (wxPython, PyQt, PyQt4 libraries)


R/Python integration (call R using Rpy, Rpy2)


Sage (www.sagemath.org)?


Sage uses existing open
-
source libraries wherever they exist!


See sagemath.org, writen in Python & Cython, not supported by MS
Windows

Web
-
applications


rApache project (www.rapache.net)


Embed R in the Apache web server


Rook package


Provides an interface to build web
-
applications with rApache


gWidgetsWWW


It’s independent of gWidgets!


Use JavaScript libraries, rapache


Shiny in Rstudio!!!

Documentation


Lots of material on the web



Journal of Statistical
Software (Vol. 49)


Special issue of R on GUIs



Lawrence and Verzani book
(2012)




gWidgets package vignette


Final comments



Don’t write a GUI which you hope others will find
useful. Write one you use yourself and hopefully it may
be of use other people



A successful GUI will requires the right balance of detail
and simplicity



Writing a GUI using R may not be the optimal
deployment of a GUI, but it is nevertheless easy to do!


“It is my opinion that programing from within R is a very good
way to get a working GUI quickly, but you are better served
leaving R for something polished and professional looking.”



R
-
Blogger



Thank you!