Skip to content

How to overload the assignment operator?

3 messages · Jens Oehlschlägel, Matthias Kohl, Oleg Sklyar

#
Dear all,

what is the proper way to make the assignment operator generic and define methods depending on the class of the assigned value?

Best regards


Jens Oehlschl?gel

P.S. I vaguely remember that this was possible in S+. In R I tried to no avail: 

  # using this like h<-1:3 gives Error: in `<-.default`(h, 1:3) : invalid (do_set) left-hand side to assignment
  "<-.default" <- get("<-") 

  # using this does fail on subassignments like: h <- 1:3 ; h[1] <- 7 (h still is 1:3)
  "<-.default" <- function(x, value){
    assign(deparse(substitute(x)), value, parent.frame())
    invisible(x)
  }

  # this seems to work
  "<-" <- function(x, value){
    UseMethod("<-", value)
  }

  # whenever the assigned value has class 'ff' I want to do execute something like
  "<-.ff" <- function(x, value){
    y <- clone(value)
    assign(deparse(substitute(x)), y, parent.frame())
    y
  }
_                           
platform       i386-pc-mingw32             
arch           i386                        
os             mingw32                     
system         i386, mingw32               
status                                     
major          2                           
minor          6.0                         
year           2007                        
month          10                          
day            03                          
svn rev        43063                       
language       R                           
version.string R version 2.6.0 (2007-10-03)

--
#
are you looking for "setReplaceMethod"?
hth
Matthias
Jens Oehlschl?gel wrote:
#
I think the question is not about setReplaceMethod, here is the idea:

## setReplaceMethod-like situation:
## the question of interest
[1] myClass
Why is this important - if x contains data that actually needs to be
duplicated this would come handy. I'd like to know the solution as well.
Maybe it's my ignorance that I don't know the answer and the response
will be RTFM - fine, just point out where :)

Best,
Oleg
On Tue, 2007-11-13 at 14:52 +0100, Matthias Kohl wrote: