[Rd] overwriting '<-' and infinite recursions

Yi Zhang yizhang84 at gmail.com
Fri Jan 23 22:48:00 CET 2009


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?

On Fri, Jan 23, 2009 at 4:25 PM,  <luke at stat.uiowa.edu> wrote:
> While it _may_ be possible to make this work in current R (I don't
> know if it is) this is a Really Bad Idea as it will affect every other
> piece of R code run on the system. It also may not work at all in
> future versions of R (assignment is sufficiently core functionality
> that it may not be implemented via a function at all in some
> circumstances).  Locked bindings are locked for a reason: we as
> developers can assume that their values are what we intend them to be.
> If those values are changed then that assumption fails and some things
> may stop working.
>
> If you explain what your needs are someone on the list can probably
> help you find a more effective and less intrusive way of doing it.
>
> luke
>
>
> On Fri, 23 Jan 2009, Yi Zhang wrote:
>
>> Hello all,
>>
>> I'm having a problem when overwriting the '<-' function and was told
>> I'd better post it here for help. The reason why I need to overwrite
>> it is complicated and not easy to tell in a few words; but this seems
>> the only clean option other than hacking R's core source code. My code
>> looks like:
>>
>> # in .onLoad of a package; or if you want to test, put it in a function
>> env <- as.environment('package:base')
>> unlockBinding('<-',env)
>> assign('<-', newAssign, envir=env)
>> .Internal(lockBinding(as.name('<-'), env))
>> #not using lockBinding directly because it calls '<-'
>>
>> It gave me this error: Error: evaluation nested too deeply: infinite
>> recursion / options(expressions=)?
>>
>> Any suggestion is appreciated!
>>
>> --
>> Yi
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
> --
> Luke Tierney
> Chair, Statistics and Actuarial Science
> Ralph E. Wareham Professor of Mathematical Sciences
> University of Iowa                  Phone:             319-335-3386
> Department of Statistics and        Fax:               319-335-3017
>   Actuarial Science
> 241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
> Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
>



-- 
Yi



More information about the R-devel mailing list