[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