developing r graphical user interfaces
DESCRIPTION
Developing R Graphical User Interfaces, presented at 1. Workshop on Development of R software for data analysis, Hasselt University, Belgium, March 13th, 2013. 2. Joint Seminar, Medical Epidemiology and Biostatistics Department, Karolinska Institutet, April 4th, 2013.TRANSCRIPT
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
04/12/2023 2
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.
04/12/2023 3
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.
04/12/2023 4
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
04/12/2023 5
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
04/12/2023 6
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).
04/12/2023 7
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 04/12/2023 8
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. 04/12/2023 9
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)04/12/2023 10
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)04/12/2023 11
Independent GUI
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)• NeaGUI (Pramana et.al, 2013)• Rcommander (Fox, 2005)• RcmdrPlugin.biclustGUI (Pramana, 2011)04/12/2023 12
Embeded GUI
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)
04/12/2023 13
IsoGeneGUI
04/12/2023 14
Main window of IsoGeneGUI
IsoGeneGUI: Isotonic Regression Plot
Command line:IsoPlot(dose, express , type="ordinal", add.curve=TRUE)
04/12/2023 15
IsoGeneGUI: Isotonic Regression Plot
Command line:IsoPlot(dose, express , type="ordinal", add.curve=TRUE)
04/12/2023 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")
04/12/2023 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")
04/12/2023 18
IsoGeneGUI Manual Guide
IsoGeneGUI help: htlm
04/12/2023 19
IsoGeneGUI Manual Guide
IsoGeneGUI help: htlm
04/12/2023 20
IsoGeneGUI Manual Guide
IsoGeneGUI help: htlm
Vignette: http://www.bioconductor.org/packages/2.11/bioc/vignettes/IsoGeneGUI/inst/doc/IsoGeneGUI.pdf
Users’ manual: http://www.ibiostat.be/software/IsoGeneGUI/files/IsoGeneGUI%20users'%20manual.pdf
04/12/2023 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. 04/12/2023 22
neaGUI Output
04/12/2023 23
neaGUI Output
04/12/2023 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? 04/12/2023 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”)
04/12/2023 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”)
04/12/2023 27
getXls <- function () { fileName <- tclvalue(tkgetOpenFile(filetypes= gettext(' {"Excel Files" {".xls"}} {"All Files" {"*"}}')))data <- get( fileName) }
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)
04/12/2023 28
Create a Dialog Box
Create the windowrequire(tcltk)tt<-tktoplevel()tkwm.title(tt,"Input Window")
Edit BoxName <- tclVar("")entry.Name <-tkentry(tt,width="20", textvariable=Name)tkgrid(tklabel(tt,text="Name:"), entry.Name)
04/12/2023 29
Create a Dialog Box
Radio buttonrb1 <- 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)
04/12/2023 30
Create a Dialog Box
List box with scroll barscr <- 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")
04/12/2023 31
Create a Dialog Box
OK buttonOK.but <-tkbutton(tt,text=" OK ", command=OnOK)tkgrid(OK.but)tkgrid.configure(OK.but)tkfocus(tt)
04/12/2023 32
Run the function (OK button)
04/12/2023 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)}
04/12/2023 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
04/12/2023 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
04/12/2023 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.
04/12/2023 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.
04/12/2023 38
R Commander
Main Window: Script
Window Output
Window Messages
04/12/2023 39
RcmdrPlugin.biclustGUI
An extension for the Rcmdr for biclustering analysis.
04/12/2023 40
Standard Rcmdr Menu
RcmdrPlugin.biclustGUI
An extension for the Rcmdr for biclustering analysis.
04/12/2023 41
Standard Rcmdr MenuRcmdr with biclustering plugin
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)
04/12/2023 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()
04/12/2023 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())}
04/12/2023 44
04/12/2023 45
doItAndPrint(paste("CCbics <-biclust(as.matrix(",.activeDataSet,"),method=BCCC(), delta=", delta, ", alpha= ", alpha, ", number= ",number ,")" , sep="") )
doItAndPrint("CCbics ")
04/12/2023 46
Output
04/12/2023 47
RcmdrPlugin.biclustGUI
RcmdrPlugin: Menu-Definition File
04/12/2023 48
The plugin menus are defined the file: menus.txt.
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 “ “ “ “ “ “ “ “
04/12/2023 49
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 “ “ “ “ “ “ “ “
04/12/2023 50
Define menu/item
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 “ “ “ “ “ “ “ “
04/12/2023 51
Name of new menu
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 “ “ “ “ “ “ “ “
04/12/2023 52
Parent of the menu
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 "" "packageAvailable ('RcmdrPlugin.BiclustGUI')"
04/12/2023 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 “ “ “ “ “ “ “ “
The second line in menus.txt defines a menu item under biclust menu:
item biclustMenu command "Biclustering Plaid " PlaidWin "" "packageAvailable ('RcmdrPlugin.BiclustGUI')"
04/12/2023 54
Define menu item
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 "" "packageAvailable ('RcmdrPlugin.BiclustGUI')"
04/12/2023 55
Menu item belongs to
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 "" "packageAvailable ('RcmdrPlugin.BiclustGUI')"
04/12/2023 56
Menu item invokes a command
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 "" "packageAvailable ('RcmdrPlugin.BiclustGUI')"
04/12/2023 57
Text displayed
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 "" "packageAvailable ('RcmdrPlugin.BiclustGUI')"
04/12/2023 58
Called function
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 "" "packageAvailable ('RcmdrPlugin.BiclustGUI')"
04/12/2023 59
Conditional activation and installation
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/package-guidelines/ 04/12/2023 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.
04/12/2023 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
04/12/2023 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.
04/12/2023 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
04/12/2023 64
The GUIs
IsoGeneGUI:http://www.bioconductor.org/packages/2.11/bioc/html/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/
• http://setiopramono.wordpress.com/r-programming/
04/12/2023 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/
04/12/2023 66
RSB-IsoGene
04/12/2023 67
Web based neaGUI
04/12/2023 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 Hochreiter’s
Group LMU Munich, Germany: Sebastian Kaiser
04/12/2023 69
Thank you for your attention…
04/12/2023 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., Göehlmann,. 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 Dose-response 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.
04/12/2023 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, 7(3), 26-33.
04/12/2023 72