Stack type
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 <murdoch at 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 at 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.