Re: [R] locator() via tcltk

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Sat 04 Jun 2005 - 12:31:47 EST

Sebastian Luque wrote:
> Hello,
>
> I'm trying to write a function using tcltk to interactively modify a plot
> and gather locator() data. I've read Peter's articles in Rnews, the help
> pages in tcltk, http://bioinf.wehi.edu.au/~wettenhall/RTclTkExamples/,
> plus a post in R-help sometime ago, but haven't found a solution.
> The idea goes something like this:
>
> require(tcltk)
> testplot <- function() {
> getcoords <- function(...) {
> locator(5)
> }
> x <- 1:1000
> y <- rnorm(1000)
> plot(x, y)
> base <- tktoplevel()
> loc.pts <- tkbutton(base, text = "Get coordinates", command = getcoords)
> quit.but <- tkbutton(base, text = "Quit",
> command = function() tkdestroy(base))
> tkpack(loc.pts, quit.but)
> }
>
> I'd like testplot to return the value from getcoords. The "Get
> coordinates" button seems to be correctly calling getcoords, and locator
> is doing its job, but I don't know how to store its value. Any help is
> very much appreciated.

You can do this with local functions. For example,

  testplot <- function() {

    coords <- NA

    getcoords <- function(...) {
      coords <<- locator(5)
    }
    x <- 1:1000
    y <- rnorm(1000)
    plot(x, y)
    base <- tktoplevel()
    loc.pts <- tkbutton(base, text = "Get coordinates", command = getcoords)     quit.but <- tkbutton(base, text = "Quit",

                         command = function() tkdestroy(base))
    tkpack(loc.pts, quit.but)
    return(function() coords)
  }

This stores the results in a variable named coords in the testplot frame. testplot itself returns a function that can read that value. You'd use it like this:

lastval <- testplot()

## do some button clicking...

lastval() # will print the result of the last click.

This is one of the somewhat weird but very nice features of R. S-PLUS doesn't work this way.

Duncan Murdoch



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sat Jun 04 12:36:46 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:32:22 EST