Dear Wolfgang, Thanks for the showMethod and the link.
I just change the argument list of foo2 to perfectly match with the definition.Perhaps juggling with the 'n' argument of 'parent.frame' could help in hacking something together that 'works'
but as far as I can see what you want to is an abuse of R's pass by value / functional language semantics.Yes I kown. When I learnt object programming, one of the basic was that some methods was design to change internals value of the fields. It is what I try to do here.
For example, try these and check whether this results in what you intended:This will not apply, because I my case, the function foo2 is avalable only for object of class FooClass and the only possible use will be :foo2(3) foo2(e+2) sapply(1:5, foo2) ls()
toto <- new("FooClass")
....
foo2(toto)
Best wishes
Christophe
Best wishes Wolfgang Christophe Genolini scripsit 15/03/10 11:33:Hi the list,I define a method that want to change an object without assignation (foo(x) and not x<-foo(x)) using deparse and assign. But when the argument of the method does not match *exactly* with the definition of the generic function, assign does not work...Anything wrong? Christophe #------ Does not work ------# setGeneric("foo1",function(x,...){standardGeneric("foo1")}) setMethod(f="foo1",signature="numeric",definition= function(x,y=1,...){ nameX<-deparse(substitute(x)) x <- x^2 assign(nameX,x,envir=parent.frame()) } ) e <- 3 foo1(e,y=5) cat(e) #------ Does work ------# setGeneric("foo2",function(x,...){standardGeneric("foo2")}) setMethod(f="foo2",signature="numeric",definition= function(x,...){ nameX<-deparse(substitute(x)) x <- x^2 assign(nameX,x,envir=parent.frame()) } ) e <- 3 foo2(e,y=5) cat(e) ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel-- Wolfgang Huber EMBL http://www.embl.de/research/units/genome_biology/huber/contact
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
