Is there a package for stacks with pushing and popping? I'd really like to do something like push(par(no.readonly=TRUE)) some stuff.... par(pop()) It seems like it wouldn't be difficult, and that someone may have already implemented a set of stack functions, and I wouldn't like to duplicate it. Thanks for your time, Dave -- Dave Forrest (434)924-3954w(111B) (804)642-0662h (804)695-2026p drf5n at virginia.edu http://mug.sys.virginia.edu/~drf5n/
>-----Original Message----- >From: r-help-admin at stat.math.ethz.ch >[mailto:r-help-admin at stat.math.ethz.ch] On Behalf Of David Forrest >Sent: Tuesday, February 25, 2003 11:34 AM >To: r-help at stat.math.ethz.ch >Subject: [R] push/pop on a stack > > >Is there a package for stacks with pushing and popping? > >I'd really like to do something like > >push(par(no.readonly=TRUE)) > > some stuff.... > >par(pop()) > >It seems like it wouldn't be difficult, and that someone may >have already implemented a set of stack functions, and I >wouldn't like to duplicate it. > >Thanks for your time, >DaveIn at least that particular example, the same save/restore operation can be achieved by: old.pars <- par(no.readonly=TRUE) ...other code par(old.pars) That is in the examples in ?par. Not sure that you need a LIFO based stack mechanism for that unless I am missing something. HTH, Marc Schwartz
> It seems like it wouldn't be difficult, and that someone may have already > implemented a set of stack functions, and I wouldn't like to duplicate it.Here's a Tuesday evening lash-up. Usage is: > mystack <- stack() # initialisation > push(mystack,value) # stores something on the stack > pop(mystack) # returns 'value' There's a print method that lists the stack. Its simply a list. Stack underflow is reported as 'attempt to select less than one element'. You can push anything on the stack. Almost. I just tried pushing a stack object onto the stack, and got infinite recursion, cant think why. Anyway, this seems to work for most sensible situations! stack <- function(){ it <- list() res <- list( push=function(x){ it[[length(it)+1]] <<- x }, pop=function(){ val <- it[[length(it)]] it <<- it[-length(it)] return(val) }, value=function(){ return(it) } ) class(res) <- "stack" res } print.stack <- function(x,...){ print(x$value()) } push <- function(stack,obj){ stack$push(obj) } pop <- function(stack){ stack$pop() } Baz