From yizhang84 at gmail.com  Sat Jan 24 21:54:06 2009
From: yizhang84 at gmail.com (Yi Zhang)
Date: Sat, 24 Jan 2009 15:54:06 -0500
Subject: [Rd] overwriting '<-' and infinite recursions
In-Reply-To: <Pine.LNX.4.64.0901231621130.3628@itasca2.wildberry.org>
References: <a0428ec90901231241u561a5848re009b252bf7d1808@mail.gmail.com>
	<alpine.DEB.1.00.0901231517430.6710@luke-inspiron>
	<a0428ec90901231348u7a23facdl4c4cd26ec16fdc96@mail.gmail.com>
	<Pine.LNX.4.64.0901231621130.3628@itasca2.wildberry.org>
Message-ID: <a0428ec90901241254hbf7800aqdff1cec21fbe4d68@mail.gmail.com>

On Fri, Jan 23, 2009 at 5:28 PM,  <luke at stat.uiowa.edu> wrote:
> On Fri, 23 Jan 2009, Yi Zhang wrote:
>
>> Thanks, Luke. I would certainly be very happy to see any non-intrusive
>> solution. The problem I'm dealing with is: I'm creating a new class
>> which references some external resource (file or database) and I want
>> to make the reference counting work. An example (-> means references):
>> Initially we have symbol a -> object oa of my class -> file fa.
>> Suppose then R code "b<-a" is executed. With no modification to the
>> '<-' function, R would make another symbol b and bind it to oa.
>> Imagine next "b[1]<-0" is executed. Here comes the trouble: R only
>> knows to duplicate oa to another ob; the modification will be done to
>> the underlying shared file fa. Of course, I have necessary code for
>> overriding "[<-" and make that modification. The whole thing is
>> because I'm not aware of any sharing of the external resource at the R
>> level. That's the motivation for me to
>> overwrite '<-' in the first place. Any potential alternative solutions?
>
> I'm still fuzzy about what you are trying to accomplish.  You have
> some code, say openFA(), that produces the oa value with
>
>   a <- openOA()
>
> Then you could do
>
>   b <- a
>
> and then
>
>   b[1] <- 0
>
> or
>
>   a[1] <- 0
>
> Do you want these to have the same effect, do you want a[1] <- 0 to do
> one thing if b <- a has happened and another if not, should one signal
> an error, ...?

Yes, I want to do something extra if b<-a has happened.
>
> From what you have written so far it would seem that messing with <-
> would't really help as
>
>   d <- list(a)
>
> and
>
>   f <- fuction(b) { ... }
>   f(a)
>
> would create similar issues that would not be addressed.

I guess you're right... Argument passing is another kind of duplicate
and I don't know how to track this kind of sharing...


-- 
Yi



[Rd] overwriting '<-' and infinite recursions
Yi Zhang