Sie sind auf Seite 1von 72

Developing R Graphical User Interfaces

Setia Pramana
Medical Epidemiology and Biostatistics Department
Karolinska Institutet, Stockholm, Sweden

Outlines
Motivations
R GUI
IsoGeneGUI
neaGUI

How to develop an R GUI?


Independent GUI
Embedded GUI
(RcmdrPlugin.BiclustGUI)

Summary
12/8/15

R Pros and Con


Free open source and widely used.
Can be integrated with other languages
(C/C++, Java).
R can interact with many data sources
and other statistical packages (SAS,
Stata, SPSS, and Minitab).
For the high performance computing task
multiple cores, either on a single
machine or across a network.
12/8/15

R: A Command line interface (CLI)


Users type commands to perform a
statistical analysis.
Is preferred for advanced users
allows direct control, more accurate,
flexible and the analysis is reproducible.

12/8/15

R: A Command line interface (CLI)


Requires good knowledge of the
language difficult for beginners or
less frequent users.
R provides tools for building GUIs
RGUI

12/8/15

Graphical User Interface (GUI)


A tool to provide an event-driven user
interface.
An extra layer between the user and the
program
Based on menus, dialog boxes, icons
and controls.
Window, icon, menu, and pointing
device (WIMP) paradigm
12/8/15

R GUI Projects
Integrated development environment
(IDE)/Script Editors aimed to provide
feature-rich environments to edit R scripts
and code: Rstudio (www.rstudio.com), and
architect (www.Openanalytics.eu)
Web based application: the Rweb
(Banfield, 1999), R.Net (www.u.arizona.edu
/~ryckman/Net.php), or gWidgetsWWW (Verzani,
2012).
12/8/15

R GUI Projects
Python: OpenMeta-Analyst (Wallace et al,
2012)
Java: JGR (Java GUI for R), Deducer
(Fellows, 2012), and Glotaran
(Snellenburg, 2012).
Php: R-php (http://dssm.unipa.it/R-php/)
Other extensions connect R to graphical
toolboxes for developing menus and
dialog boxes: Tcltk, Gtk.
Today, we focus on Tcltk
12/8/15

R GUI Tcl/Tk
Most commonly used: easy, no
additional software needed and ready to
be used in R (tcltk package)
R-Tcl/Tk interface from the tcltk
package (Dalgaard, 2001 and Welch,
2000).
The tcltk package allows the use of the
Tk (toolkit) graphical user interface
elements within R by embedding Tk
commands into the R language.
12/8/15

R GUI Tcl/Tk
R GUIs developed by using tcl/tk or
RGtk:
LimmaGUI (Wettenhall and Smyth,

2004),
LMMNorm (Haldermans, 2010),
IsoGeneGUI (Pramana et al. , 2010,

2012)
NeaGUI (Pramana et.al, 2013)
Rcommander (Fox, 2005)
RcmdrPlugin.biclustGUI (Pramana, 2011)
12/8/15

10

R GUI Tcl/Tk
R GUIs developed by using tcl/tk or
RGtk:

Independen
t GUI

LimmaGUI (Wettenhall and Smyth,

2004),
LMMNorm (Haldermans, 2010),
IsoGeneGUI (Pramana et al. , 2010,

2012)
NeaGUI (Pramana et.al, 2013)
Rcommander (Fox, 2005)
RcmdrPlugin.biclustGUI (Pramana, 2011)
12/8/15

11

R GUI Tcl/Tk
R GUIs developed by using tcl/tk or
RGtk:
LimmaGUI (Wettenhall and Smyth,

2004),
LMMNorm (Haldermans, 2010),
IsoGeneGUI (Pramana et al. , 2010,

2011)

Embeded
GUI

NeaGUI (Pramana et.al, 2013)


Rcommander (Fox, 2005)
RcmdrPlugin.biclustGUI (Pramana, 2011)
12/8/15

12

IsoGeneGUI
To perform dose response microarray
analysis in early drug development.
Identify genes with a monotonic trend in
the expression levels with respect to the
increasing doses
CLI based: IsoGene package
(Pramana,2010)

12/8/15

13

IsoGeneGUI

Main window of IsoGeneGUI


12/8/15

14

IsoGeneGUI: Isotonic Regression Plot


Command line:
IsoPlot(dose, express , type="ordinal", add.curve=TRUE)

12/8/15

15

IsoGeneGUI: Isotonic Regression Plot


Command line:
IsoPlot(dose, express , type="ordinal", add.curve=TRUE)

12/8/15

16

IsoGeneGUI: Significant Analysis Microarray


qqstat <- Isoqqstat(x, y,
fudge="pooled",
niter=50)
allfdr <- Isoallfdr(qqstat, , stat =
"E2")
IsoSAMPlot(qqstat, allfdr, FDR =
0.1,
stat = "E2")
SAM.Res <- IsoTestSAM(x, y,
fudge="pooled", niter=50,
FDR=0.05, stat="E2")

12/8/15

17

IsoGeneGUI: Significant Analysis Microarray


qqstat <- Isoqqstat(x, y,
fudge="pooled",
niter=50)
allfdr <- Isoallfdr(qqstat, , stat =
"E2")
IsoSAMPlot(qqstat, allfdr, FDR =
0.1,
stat = "E2")
SAM.Res <- IsoTestSAM(x, y,
fudge="pooled", niter=50,
FDR=0.05, stat="E2")

12/8/15

18

IsoGeneGUI Manual Guide


IsoGeneGUI
help: htlm

12/8/15

19

IsoGeneGUI Manual Guide


IsoGeneGUI
help: htlm

12/8/15

20

IsoGeneGUI Manual Guide


IsoGeneGUI
help: htlm

Vignette:
http://www.bioconductor.org/packages/2.11/bioc/vignettes/IsoG
eneGUI/inst/doc/IsoGeneGUI.pdf

Users manual:
http://www.ibiostat.be/software/IsoGeneGUI/files/IsoGeneGUI
%20users'%20manual.pdf
12/8/15

21

neaGUI
To help interpretation of
differentially expressed
(DE) genes in context of
biological processes,
pathways and networks.
Perform network
enrichment analysis.
Input: DE genes
Output: enriched
pathways statistics
based on gene
interaction networks.

12/8/15

22

neaGUI Output

12/8/15

23

neaGUI Output

12/8/15

24

RGUI, How to Build One?


Choose one of RGUI categories, and tools to be
used (tcltk, java, etc.) which suit with the
package purpose.
Make sketches of the window box and
consider:
Input
Options
Output
Can all functions be run in a single window
(e.g. neaGUI)? Or a main window with menu
(IsoGeneGUI) and separate dialog boxes are
needed?
12/8/15

25

Create Main Window


tt <- tktoplevel()
tkwm.title(tt,"My New GUI")
topMenu <- tkmenu(tt)
tkconfigure (tt,menu=topMenu)
fileMenu <- tkmenu(topMenu,tearoff=FALSE)
openMenu <- tkmenu(topMenu,tearoff=FALSE)
tkadd(openMenu,"command",label="xls file",
command= getXls)
tkadd(openMenu,"command",label="text file)

12/8/15

26

Create Main Window


tt <- tktoplevel()
tkwm.title(tt,"My New GUI")
topMenu <- tkmenu(tt)
tkconfigure (tt,menu=topMenu)
fileMenu <- tkmenu(topMenu,tearoff=FALSE)
openMenu <- tkmenu(topMenu,tearoff=FALSE)
tkadd(openMenu,"command",label="xls file",
command= getXls)
tkadd(openMenu,"command",label="text
file)
getXls <- function
() {
fileName <tclvalue(tkgetOpenFile(filetypes=
gettext(' {"Excel Files" {".xls"}}
{"All Files" {"*"}}')))
data <- get( fileName) }

12/8/15

27

Create Main Window


tt <- tktoplevel()
tkwm.title(tt,"My New GUI")
topMenu <- tkmenu(tt)
tkconfigure (tt,menu=topMenu)
fileMenu <- tkmenu(topMenu,tearoff=FALSE)
openMenu <- tkmenu(topMenu,tearoff=FALSE)
tkadd(openMenu,"command",label="xls file",
command= getXls)
tkadd(openMenu,"command",label="text file")
tkadd(fileMenu,"cascade",label="Open data",
menu=openMenu)
tkadd(fileMenu,"cascade",label="Edit data")
tkadd(fileMenu,"command",label="Quit",command=function() tkdestroy(tt))
tkadd(topMenu,"cascade",label="File",menu=fileMenu)
tkadd(topMenu,"cascade",label="Help")
tkfocus(tt)
12/8/15

28

Create a Dialog Box


Create the window
require(tcltk)
tt<-tktoplevel()
tkwm.title(tt,"Input Window")

Edit Box
Name <- tclVar("")
entry.Name <-tkentry(tt,width="20",
textvariable=Name)
tkgrid(tklabel(tt,text="Name:"), entry.Name)

12/8/15

29

Create a Dialog Box


Radio button
rb1 <- tkradiobutton(tt)
rb2 <- tkradiobutton(tt)
rbValue <- tclVar("Male")
tkconfigure(rb1,variable=rbValue,
value="Male")
tkconfigure(rb2,variable=rbValue,
value="Female")
tkgrid(tklabel(tt,text="Sex:"))
tkgrid(tklabel(tt,text="Male"),rb1)
tkgrid(tklabel(tt,text="Female"),rb2)

12/8/15

30

Create a Dialog Box


List boxwith scroll bar
scr <- tkscrollbar(tt, repeatinterval=5,
command=function(...) tkyview(tl,...))
tl<-tklistbox(tt,height=4,selectmode="single",
background="white")
tkgrid(tklabel(tt,text="City:"), tl, scr)
city <- c("Brussels","Jakarta", "London",
"Stockholm")
for (i in (1:4)) tkinsert(tl,"end",city [i])
tkselection.set(tl,1)
tkgrid.configure(scr,rowspan=4,sticky="nsw")

12/8/15

31

Create a Dialog Box


OK button
OK.but <-tkbutton(tt,text="
command=OnOK)
tkgrid(OK.but)
tkgrid.configure(OK.but)
tkfocus(tt)

OK

",

12/8/15

32

Run the function (OK button)

12/8/15

33

Run the function (OK button)

OnOK <- function() {


NameVal <- tclvalue(Name)
rbVal <- as.character(tclvalue
(rbValue))
if (rbVal=="Male") pref = "Mr."
if (rbVal=="Female") pref = "Mrs.
cityChoice <- city [as.numeric(tkcurselection(tl))+1]
tkdestroy(tt)
msg <- paste("Good morning ",pref , NameVal , "from",
cityChoice, sep=" ")
tkmessageBox(message=msg)
}
12/8/15

34

Embeded R GUI: Rcmdr Plugin


GUIs that are embedded/attached into
another GUI, i.e., R Commander (Rcmdr)
Rcmdr was originally developed as a
basic-statistics graphical user interface
(GUI) to R.
Rcmdr needs extension for specific
statistical analysis
More than 20 Rcmdr plugins today
12/8/15

35

Rcmdr Plugin Advantages


Does not need to develop GUI for
common procedures: Open, save and
manipulate data.
Can use standard statistical analysis.
In term of programming: easier
(standard tcltk commands are provided)
Users know how to work in command
line
12/8/15

36

R Commander (Rcmdr)
Developed by John Fox from McMaster
University, Canada.
Not only providing GUIs but also
rendering users to R commands
Advantages:
Ease of use. Beginners will have less
problem to start to use Rcmdr.
Coverage. Offers wide range of basic
statistics analysis and data management.
12/8/15

37

R Commander (Rcmdr)
Advantages:
Cross-platform functionality. Primarily under
Windows, but also available in Linux and
Macintosh OS/X.
Extensibility: one can develop plug-in"
packages for new methods/analysis.
Protects the novices from errors. Limited
options related to the current context will
minimize the errors made by users.
Exposes users to R commands.
12/8/15

38

R Commander
Main Window:
Script
Window
Output
Window
Messages

12/8/15

39

RcmdrPlugin.biclustGUI
An extension for the Rcmdr for
biclustering analysis.
Standard Rcmdr Menu

12/8/15

40

RcmdrPlugin.biclustGUI
An extension for the Rcmdr for
biclustering analysis.
Rcmdr
with biclustering
plugin
Standard
Rcmdr Menu

12/8/15

41

Create a Dialog Box


initializeDialog(title =
gettextRcmdr("Biclustering-CC"))
specFrame <- tkframe(top, borderwidth=5)
tkgrid(labelRcmdr(specFrame , text=gettextRcmdr("CC Specification:")))
deltaVal <- tclVar( ")
deltaField <- ttkentry(specFrame, width = "5",textvariable = deltaVal )
tkgrid(labelRcmdr(specFrame , text=gettextRcmdr("Delta:")), deltaField)
alphaVal <- tclVar("2")
alphaField <- ttkentry(specFrame, width = "5",textvariable = alphaVal )
tkgrid(labelRcmdr(specFrame , text=gettextRcmdr("Alpha:")), alphaField)
12/8/15

42

Create a Dialog Box


numberVal <- tclVar("100")
numberField <- ttkentry(specFrame,
width = "5, textvariable = numberVal)
tkgrid(labelRcmdr(specFrame , text=gettextRcmdr("Maximal
Numbers : ")), numberField)
OKbutton <- buttonRcmdr(specFrame , text = gettextRcmdr("Show
Result"),
width = "12", command = onOK, default = "active",
borderwidth = 3)
tkgrid(OKbutton,Plotbutton ,exitButton ,helpButton)
tkgrid(specFrame)
dialogSuffix()

12/8/15

43

Submitting the job (OK button)


onOK <- function() {
.activeDataSet <- ActiveDataSet()
delta <- paste(tclvalue(deltaVal ))
alpha <- paste(tclvalue(alphaVal ))
number <- if (tclvalue( numberVal) == "") "100
else paste(tclvalue(numberVal))
doItAndPrint(paste("CCbics <biclust(as.matrix(",.activeDataSet,"),
method=BCCC(), delta=", delta, ", alpha= ", alpha, ",
number=
",number ,")" , sep="") )
doItAndPrint("CCbics ")
tkfocus(CommanderWindow())
}
12/8/15

44

doItAndPrint(paste("CCbics <-biclust(as.matrix(",.activeDataSet,"),
method=BCCC(), delta=", delta, ", alpha= ", alpha, ", number=
",number ,")" , sep="") )
doItAndPrint("CCbics ")

12/8/15

45

Output

12/8/15

46

RcmdrPlugin.biclustGUI

12/8/15

47

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.

12/8/15

48

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

12/8/15

49

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
Define
Define
menu/item
The
first line in menus.txt defines the top-level
menu/item
biclustGUI menu:
Menu

biclustMenu

topMenu

12/8/15

50

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
Name
Name of
of
The first
new
menu
newline
menuin menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

12/8/15

51

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
Parent
Parent of
of
The first line in the
menus.txt
defines the top-level
the menu
menu
biclustGUI menu:
Menu

biclustMenu

topMenu

12/8/15

52

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

The second line in menus.txt defines a menu item


under biclust menu:
item biclustMenu command "Biclustering Plaid " PlaidWin
('RcmdrPlugin.BiclustGUI')"

""

"packageAvailable

12/8/15

53

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

Define
Define
menu
The
second
item
menu
item

line in menus.txt defines a menu item


under biclust menu:

item biclustMenu command "Biclustering Plaid " PlaidWin


('RcmdrPlugin.BiclustGUI')"

""

"packageAvailable

12/8/15

54

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

Menu
Menu item
item
second
belongs
belongs to
to

The
line in menus.txt defines a menu item
under biclust menu:
item biclustMenu command "Biclustering Plaid " PlaidWin
('RcmdrPlugin.BiclustGUI')"

""

"packageAvailable

12/8/15

55

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

Menu
Menu item
item
The second invokes
line
aa menus.txt
invokesin
command
command
under biclust
menu:

defines a menu item

item biclustMenu command "Biclustering Plaid " PlaidWin


('RcmdrPlugin.BiclustGUI')"

""

"packageAvailable

12/8/15

56

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

Text
Text
menus.txt
displayed
displayed

The second line in


under biclust menu:

defines a menu item

item biclustMenu command "Biclustering Plaid " PlaidWin


('RcmdrPlugin.BiclustGUI')"

""

"packageAvailable

12/8/15

57

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

The second line in menus.txt


under biclust menu:

Called
Called
defines
function
function

item biclustMenu command "Biclustering Plaid " PlaidWin


('RcmdrPlugin.BiclustGUI')"

""

a menu item
"packageAvailable

12/8/15

58

RcmdrPlugin: Menu-Definition File


The plugin menus are defined the file: menus.txt.
The first line in menus.txt defines the top-level
biclustGUI menu:
Menu

biclustMenu

topMenu

Conditional activation

activation
The second line in menus.txt defines Conditional
a and
menu
item
and installation
installation
under biclust menu:
item biclustMenu command "Biclustering Plaid " PlaidWin
('RcmdrPlugin.BiclustGUI')"

""

"packageAvailable

12/8/15

59

Next Stage
Error handling: message boxes, warnings, etc.
Trial by other people.
Compile as a package.
Submit in a repository for development we
can use R-forge.
When all ready, submit to a repository,
Bioconductor, or CRAN.
Bioconductor more restrict and have to comply
all guidelines:
http://www.bioconductor.org/developers/packag
e-guidelines
/

12/8/15

60

Summary
A GUI could help novice R users for utilizing all the
power of R.
Increase the use of our package/methods
especially by scientists with no/less knowledge of
R.

12/8/15

61

Summary
A GUI could help novice R users for utilizing all the
power of R.
Increase the use of our package/methods
especially by scientists with no/less knowledge of
R.
Things to consider in developing a GUI:
Type of GUI (spreadsheets, menu/dialog boxes),
Tool to develop (tcltk, java)
Embedded/Independent.
Single/Multi dialog boxes
12/8/15

62

Summary
Independent GUI: really for a specific use, no need
of useless capabilities, simpler.
Rcmdr PlugIn in: easier, all standard data
manipulation and analysis is ready, users can
learn the command.

12/8/15

63

Summary
Independent GUI: really for a specific use, no need
of useless capabilities, simpler.
Rcmdr PlugIn in: easier, all standard data
manipulation and analysis is ready, users can
learn the command.
Make sure GUI is simple and user friendly.
Design Development Trial Packaging and
Storing

12/8/15

64

The GUIs
IsoGeneGUI:http
://www.bioconductor.org/packages/2.11/bioc/h
tml/IsoGeneGUI.html
neaGUI:
https://r-forge.r-project.org/projects/neagui/
biclustGUI: http://
www.ibiostat.be/software/BiclustGUI/index.html
Examples of RGUI:
http://www.sciviews.org/_rgui/
http://bioinf.wehi.edu.au/~wettenhall/RTclTkExa
mples
/
12/8/15

65

Next Development:
Isogene RSB : Web based development using
R Service Bus: http://
www.openanalytics.eu/r-service-bus
R Service Bus: plug R into a processes
independently of the technology used by other
software applications involved in the workflow.
Web Based neaGUI using shiny
Shiny: Easy web applications in R: http
://www.rstudio.com/shiny/

12/8/15

66

RSB-IsoGene

12/8/15

67

Web based neaGUI

12/8/15

68

Collaborator
Karolinska Institutet, Sweden: Yudi Pawitan & Woojoo Lee
Scilifelab, Sweden: Andrey Alexeyenko
Johnson & Johnson Research and Development, Belgium: Luc
Bijnes & Willem Talloen.
Hasselt University, Belgium: Ziv Shkedy, Dan Lin, Philippe H,
Martin O Pushpike, Tatsiana K.
Open Analytics, Belgium: Tobias Verbeke
Johannes Kepler University of Linz, Austria: Sepp Hochreiters
Group
LMU Munich, Germany: Sebastian Kaiser

12/8/15

69

Thank you for your attention

12/8/15

70

References
Pramana, S., Lin, D., and Shkedy Z., (2010), IsoGeneGUI
Bioconductor Package Vignette.
Pramana, S., Lin, D., Haldermans, P., Shkedy Z., and
Verbeke, T., De Bondt, A., Talloen, W., Gehlmann,. H
and Bijnens, L. (2010). IsoGene: An R Package for
Analyzing Dose-response Studies in Microarray
Experiments", R Journal 2/1.
Pramana, S., Lin, D., Haldermans P., and Verbeke, T.
(2102). A User Friendly Interface for Analyzing Doseresponse Studies in Microarray Experiments: The
IsoGene-GUI package, in Lin, D., Shkedy, Z., Yekutieli,
D., Amaratunga, D. and Bijnens L. (editors). Modeling
Dose-response Microarray Data in Early Drug
Development Experiments Using R, Springer.
12/8/15

71

References
Pramana (2011) RcmdrPlugin.BiclustGUI: A User Friendly
Interface for Biclustering Analysis, a chapter of PhD:
Statistical Methods for Microarray Experiments:
Analysis Dose-response Studies and Software
Development in R, Hasselt University, Belgium.
Pramana, S., Lee, W., Alexeyenko, A., Pawitan., Y. (2012).
neaGUI: A Graphical User Interface for Network
Enrichment Analysis.
Fox J (2005). The R Commander: A Basic-Statistics
Graphical User Interface to R." Journal of Statistical
Software, 14(9), 1-42.
Valero-Mora, P.M and Ledesma R.D. (2012) Graphical
User Interfaces for R. Journal of Statistical Software.
Verzani J (2007). An Introduction to gWidgets." R News,
12/8/15

72

Das könnte Ihnen auch gefallen