[prev in list] [next in list] [prev in thread] [next in thread]
List: r-devel
Subject: [Rd] How to force dispatch to an internal generic?
From: Skye Bender-deMoll <skyebend () skyeome ! net>
Date: 2013-12-20 18:37:11
Message-ID: 52B48E57.8010308 () skyeome ! net
[Download RAW message or body]
Dear R-devel,
I have a class 'myClass' in R that is essentially a list with
pre-specified structure. It has an assignment operator which is going to
do some things and then should assign the value using the regular list
assignment operator
`$<-.myClass`<-function(x,i,value){
# do some pre-processing stuff
# make the assignment using the default list assignment
x[[i]]<-value
x
}
But I can't actually use x[[i]]<-value as it will dispatch to the
already existing [[<-.myClass method.
In similar S3 dispatching cases, I've been able use UseMethod or
specifically call [[<-.list, or [[<-.default but those don't seem to
exist because $<- and [[<- are primitive generics, right? I couldn't
figure out a way to effectively call call NextMethod, and I assume
calling .Primitive("$<-") is not appropriate.
My current solution mirrors $<-.data.frame
`$<-.data.frame` <- function (x, name, value) {
cl <- oldClass(x)
class(x) <- NULL
x[[name]] <- value
class(x) <- cl
x
}
but according to tracemem(), this is triggering three deep copies of
myClass objects (which can be expensive as the object is often very
large ) with each $ assignment instead of one.
Is there a better way to dispatch the assignment to the default
assignment method?
Note: I previously posted the same question at
http://stackoverflow.com/questions/20627776/how-to-force-dispatch-to-an-internal-generic-in-r
thanks for your help,
-skye
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic