On Fri, Jan 15, 2010 at 5:30 PM, Janko Thyson <janko.thy...@ku-eichstaett.de> wrote: > Dear List, > > I am not really familiar with any other language than R, but I’ve heard that > in other languages there is something called “self referencing”. > > Here’s what I’m trying to get an answer for: > Suppose there is a function that takes as its input a value of a slot of an > S4 object. The function itself is stored in another slot of the SAME S4 > object. Is it then possible to have the function automatically “recognize” > the name of the object in which slot it is placed via some sort of “self > referencing” of the S4 object (to avoid having to explicitly state the > required function argument for different S4 object instances with different > names)? > > I hope the following code snippets will give you an idea what I’m trying to > do: > > obj.for.slot <- data.frame(a=1); obj.for.slot <- data.frame(a=100) > save(obj.for.slot, file="C:/obj.1.for.slot.Rdata"); save(obj.for.slot, > file="C:/obj.2.for.slot.Rdata") > > slotfun <- function(obj.name) > { > file.fqn.char <- paste("file.fqn <- ", obj.name, "@file.fqn", > sep="") > eval(parse(text=file.fqn.char)) > load(file=file.fqn) > return(obj.for.slot) > } > > setClass( > Class="Testclass", > representation=representation( > file.fqn="character", > data="function" > ), > prototype=prototype( > file.fqn="blabla", > data=slotfun > ) > ) > > test <- new("Testclass") > test.mod <- new("Testclass") > > > t...@file.fqn <- "C:/obj.1.for.slot.Rdata" > test....@file.fqn <- "C:/obj.2.for.slot.Rdata" > > t...@data(obj.name="test") > test....@data(obj.name="test.mod")
An object does not have a unique name. What would happen in the following situations? t3 <- test.mod tests <- list( test, test.mod ) Hadley -- http://had.co.nz/ ______________________________________________ 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.