Skip to content
Back to formatted view

Raw Message

Message-ID: <f8e6ff051001151034o65fa7264vf02d4d3b6542a38b@mail.gmail.com>
Date: 2010-01-15T18:34:44Z
From: Hadley Wickham
Subject: Can an object reference itself?
In-Reply-To: <D21D3969F0514A67987339358EECC28A@ashb109c02>

On Fri, Jan 15, 2010 at 5:30 PM, Janko Thyson
<janko.thyson at 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")
>
>
> test at file.fqn ? ? ? ? ? <- "C:/obj.1.for.slot.Rdata"
> test.mod at file.fqn ? ? ? <- "C:/obj.2.for.slot.Rdata"
>
> test at data(obj.name="test")
> test.mod at 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/