Here is an example using proto based on converting Duncan's example:

library(proto)
Stack <- proto(new = function(.) proto(Stack,
        stack = NULL,
        push = function(., el) .$stack <- c(list(el), .$stack),
        pop = function(.) { stopifnot(length(.$stack) > 0)
                out <- .$stack[[1]]
                .$stack[[1]] <- NULL
                out
        }))

mystack <- Stack$new()
mystack$push( 1 )
mystack$push( letters )
mystack$pop()
mystack$pop()
mystack$pop() # gives an error


On Mon, Mar 1, 2010 at 8:14 PM, Duncan Murdoch <murd...@stats.uwo.ca> wrote:
> On 01/03/2010 7:56 PM, Worik R wrote:
>>
>> How can I implement a stack in R?
>>
>> I want to push and pop.  Every thing I push and pop will be the same
>> type, but not necessarily an atomic type.
>
> Use lexical scoping:
>
> stack <- function() {
>  store <- list()
>  push <- function(item) {
>    store <<- c(list(item), store)
>    invisible(length(store))
>  }
>  pop <- function() {
>    if (!length(store)) stop("Nothing to pop!")
>    result <- store[[1]]
>    store[[1]] <<- NULL
>    result
>  }
>  list(push=push, pop=pop)
> }
>
> mystack <- stack()
> mystack$push( 1 )
> mystack$push( letters )
> mystack$pop()
> mystack$pop()
> mystack$pop() # gives an error
>
> Duncan Murdoch
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to