[R-gui] R GUI considerations (was: R, Wine, and multi-threadedness)
Hi All, While I don't have the "sweat equity" that either Philippe Grosjean and James Wettenhall have in developing R GUI's, I have been involved in two different projects (obveRsive as part of the founding development team, and R Commander as a contributor) over the past three years. In addition, my interest is in R GUIs that are not platform specific (such as Philippe's SciViews for Windows or Thomas Friedrichsmeier's RKward for KDE). Based on a combination of both my experience and my interest, I want to make two observations, and offer three opinions about issues people should consider when thinking about what they can do to move GUI's for R forward. My first observation is that gluing R to any external, platform independent, widget tool kit is hard. James indicates that it isn't easy for wxWidgets. My memory is he got it to work under Window's, but had a hard time making it work under Linux, and Jan de Leeuw also found it to be a real challenge just to get the RSPython layer to work under Mac OS X. On the obveRsive project we decided to use the Fox tool kit because (1) it had a larger selection of more "modern" widgets compared to Tk, and (2) it was the only multi-platform toolkit that actually worked under Windows, Linux, and Mac OS X platforms at the time we started the project in late 2002 (at that time wxWindows hadn't actually been ported to OS X). In order to use the Fox toolkit, we decided to use R as a backend. However, we, along with a number of other failed early projects (we pretty much decided to admit the demise of obveRsive this past week), found this to be a Herculean task (Zed Shaw in his work on obveRsive spent many frustrating nights trying to think of ways to develop a backend approach that worked quickly and consistently). Ultimately, R does not behave the way Perl, Python, Ruby, and Tcl/Tk do, which makes gluing it to an external GUI toolkit a real chore. The second observation is that the R Tcl/Tk package is incredibly robust (the efforts of Peter Dalgaard and others who have worked on this effort should really be applauded in my opinion). I've used Rcmdr (based on the R Tcl/Tk package) successfully in classes where students used a mix of Windows and Mac OS X machines. To be honest, that it works at all, let alone that it is so rock solid, under Mac OS X simply amazes me since the Tcl/TK widgets use a different windowing system (X11) than the R console application (run under Aqua) in a standard, CRAN based, setup on OS X. My first opinion is that too much bandwidth on the R-sig-gui mailing list has been spent on philosophical arguments about which toolkit is the "right" one to use. From a practical perspective, the Tk toolkit works well on all major platforms. The only real potential alternative for multi-platform application seems to be Java (as Philippe indicates, GTK2 is problematic under Windows, but also has some issues under OS X). However, only the JGR project appears to be using Java for an ambitious multi-platform application. At this point, I would really like to hear Markus Helbig's, Simon Urbanek's, Martin Theus's, and other JGR developers' opinions about the suitability of Java as a general tool for developing GUI's for R since they would have well informed opinions on this topic. Second, it is my belief that there is a huge potential benefit to devoting efforts to simplify the use of the available working tool kits (i.e., the R Tcl/Tk package and Java) so that it is easier to develop GUI dialogs for a package or a specific procedure. To that end, John Fox has developed a number of macro-based "helper functions" for Rcmdr that greatly simplifies the creation of GUI dialogs for this package. My guess is that some of these could be fairly easily included as part of the R Tcl/Tk package. Moreover, other helper functions, based on John's approach, could also be developed. Going a bit further, as part of the obveRsive project, Thomas Friedrichsmeier wrote a module that enabled obveRsive dialog writers to write their dialogs using xml tags. His xml tags approach really simplified dialog creation. However, porting what he did for obveRsive to R Tcl/Tk would be a very difficult task, but one that is worth considering. My final opinion (which is focused on the R Tcl/Tk package) is that having a limited and "ugly," but working, set of widgets is much more important than having an extensive collection of "modern" widgets that behave badly, or are only available for some OSs. This is not to say that I think no effort should be devoted to expanding the set of widgets available under the R Tcl/Tk package, rather, I think there is a need for a conversation and consensus about which additional widgets would likely provide the greatest improvement in GUI applications developed under R as a way of prioritizing any efforts in this area, and that the goal of these efforts should be to make the desired widgets available under all major operating systems on which R runs. Overall, my belief is that R already has a number of useful tools for developing GUIs, and that there is probably much greater return to efforts to improve the usability of these existing tools than in developing completely new toolkits or developing an API from scratch as this moment in time. My apologies for the length of this post. Dan
On 15-Oct-05, at 8:27 PM, James Wettenhall wrote:
Hi Philippe and everyone else, As you know, I have certainly spent some time thinking about R- GUIs, and developing some R-Tcl/Tk GUIs - limmaGUI and affylmGUI (available from Bioconductor). I have also spent some time wishing we could use a GUI toolkit with a more modern look and feel. Hence I have investigated wxWidgets, and thought that using wxPython might be the easiest way to interface it from R, but I ran into some technical problems (especially because I was obsessed with trying to make the interface from R to wx seem not-too-object-oriented, i.e. I like the idea of 1. create a dialog, 2. add a button etc. like in Tcl/Tk rather defining a dialog class, then defining an object which is an instance of that class and then invoking a show method on that object etc.) I can't really afford to make R-GUIs much of a priority in my work any more (so I may not read these philosophical discussions about which GUI toolkit is best as closely as I used to), but I'm happy to answer any specific questions about my experience with R-GUI development. I hope that doesn't sound too presumptuous of me, but I think that John Fox's R-Tcl/Tk GUI package (Rcmdr) and mine (limmaGUI and affylmGUI) are some of the most sophisticated (and most popular in terms of users) attempts to build a platform-independent GUI interface to a command-line R package (or packages). And then there are other really nice GUIs for R which are not necessarily platform independent - like some of Philippe's SciViews software, and I recently came across a really nice GUI using GraphApp (Windows only) for connecting to ODBC - I think it was in Brian Ripley's RODBC package. One point I wanted to make here is that there are some people in the R community who have really great experience to offer from trying to develop better R GUIs, but who don't necessarily participate on the R-SIG-GUI mailing list. For example, I was talking to Jan de Leeuw on the R- SIG-MAC mailing list and he mentioned that he has done some great work trying to interface R-wxPython, but that it was difficult maintaining the glue between the different components. And there are people in Bioconductor (e.g. Jianhua Zhang - widgetTools & tkWidgets, Jeff Gentry - widgetInvoke) and there are people who have been involved in OmegaHat e.g. Duncan Temple Lang who all have great experience to offer. But some of the 'philosophical' ideas that people would like to implement e.g. interfacing R and wxWidgets 'directly' without going through Python (e.g. using Cable Swig) (or interfacing R and Tk via C rather than via Tcl) seem like a massive task, and no-one seems sufficiently motivated to provide money to employ someone (or multiple people) to do something as big as that. Just my thoughts. Feel free to ignore. Regards, James
_______________________________________________ R-SIG-GUI mailing list R-SIG-GUI at stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-gui