[R] Re: locator() via tcltk

Sebastian Luque spluque at gmail.com
Sat Jun 4 05:58:57 CEST 2005


That's very interesting, thanks a lot Duncan. I should re-read the R
Language manual in more detail.

Sebastian

On 6/3/05, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> 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
> 


-- 
Sebastian Luque
Department of Biology
Memorial University of Newfoundland




More information about the R-help mailing list