Re: [Rd] Re: [R] Problem going back to a viewport with gridBase

From: Gabor Grothendieck <>
Date: Fri 03 Jun 2005 - 12:54:35 GMT

On 6/2/05, Paul Murrell <> wrote:
> Hi

Thanks. I have mucked around in vpTree structures and discovered its actually quite easy to specify children so I have changed my example so that instead of naming the children of 'layout' and then remembering coordinates linked to the names of the children of 'layout' in the 'coords' structure (which really just duplicates state information already available in grid) it simply follows the order of the children of 'layout' directly. This permits elimination of 'coords' and the two naming functions. Using the depth approach you advocate, 'with' also becomes shorter and I think I have it to the point where it works with both vpPath and viewport classes. Once Deepayan implements the use.viewport= argument to print, 'with' can be eliminated too. No questions this time but I thought I would post the latest version for completeness. Regards.

[pushLayout is same as before except there are no names on the children of 'layout' and the rest is new]


pushLayout <- function(nr, nc, name="layout") {   pushViewport(viewport(layout=grid.layout(nr, nc), name=name))   for (i in 1:nr) {
    for (j in 1:nc) {

      pushViewport(viewport(layout.pos.row=i, layout.pos.col=j))


with.vpPath <- with.viewport <- function(data, expr, ...) {

      # if data is a vpPath it cannot be ROOT since NULL will never dispatch here

      depth <- if (data$name == "ROOT") 0 else downViewport(data$name)
      result <- eval.parent(substitute(expr))



# specify number of cells to fill and number of rows n <- 5; nr <- 3

nc <- ceiling(n/nr)
downViewport(pushLayout(nr, nc))

vpt <- current.vpTree(all = FALSE)
for(k in 1:n) with(vpt$children[[k]],

      print( xyplot(v ~ v, list(v = 1:k)), newpage = FALSE ) ) mailing list Received on Fri Jun 03 22:59:39 2005

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 03:21:06 GMT