For learning purposes mainly I attempted to implement hashes/maps/dictionaries (Python lingua) as S4 classes, see the coding below. I came across some rough S4 edges, but in the end it worked (for one dictionary).
When testing ones sees that the dictionaries D1 and D2 share their environments [EMAIL PROTECTED] and [EMAIL PROTECTED], though I thought a new and empty environment would be generated each time 'new("Dict")' is called. QUESTION: How can I separate the environments [EMAIL PROTECTED] and [EMAIL PROTECTED] ? Reading the articles mentioned in "Tipps and Tricks" didn't help me really. Of course, I will welcome other corrections and improvements as well. Working in R 2.7.0 under Windows. Hans Werner #-- Class and method definition for dictionaries ------------------------------- setClass("Dict", representation (hash = "environment"), prototype (hash = new.env(hash=T, parent = emptyenv())) ) setMethod("show", signature(object="Dict"), definition = function(object) ls([EMAIL PROTECTED]) ) setGeneric("hclear", function(object) standardGeneric("hclear")) setMethod("hclear", signature(object="Dict"), function(object) rm(list=ls([EMAIL PROTECTED]), [EMAIL PROTECTED]) ) setGeneric("hput", function(object, key, value) standardGeneric("hput")) setMethod("hput", signature(object="Dict", key="character", value="ANY"), function(object, key, value) assign(key, value, [EMAIL PROTECTED]) ) setGeneric("hget", function(object, key, ...) standardGeneric("hget")) setMethod("hget", signature(object="Dict", key="character"), function(object, key) { if (exists(key, [EMAIL PROTECTED], inherits = FALSE)) { get(key, [EMAIL PROTECTED]) } else { return(NULL) } } ) # ---- Some tests ---- D1 <- new("Dict") hput(D1, "a", 1) # Same as: [EMAIL PROTECTED] <- 1 hput(D1, "b", 2) hget(D1, "a") hget(D1, "b") show(D1) D2 <- new("Dict") hput(D2, "c", 3) hput(D2, "d", 4) hget(D2, "a") # Wrong: was defined only for D1 hget(D2, "b") show(D2) hclear(D2) # Wrong: clears D1 too show(D1) #--------------------- ______________________________________________ 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.