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