Developing R Graphical User Interfaces

Post on 12-May-2015

4.894 views 2 download

Tags:

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 of Developing R Graphical User Interfaces

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

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