Hi. NextMethod("[[<-") do indeed call the "next"
"[[<-"() method. The
thing is that it is also return the update object, which you are *not*
taking care of. You are just returning the same object again. So here is
what you want:
"[[<-.myA"<-function(mvl,name,value) {
if(data.class(value) == "myB") {
mvl$data[[name]] <- value
mvl
} else {
NextMethod("[[<-")
}
}
Also, it is better to use data.class(obj) than class(obj)[1].
Cheers
Henrik Bengtsson
Lund University
> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Eryk Wolski
> Sent: den 25 oktober 2003 16:27
> To: r-help at stat.math.ethz.ch
> Subject: [R] Whats wrong with NextMethod("[[<-")?
>
>
> Hi!
>
> Given a list object "myA" with several fields
> i want to construct the assignment function "[[<-.myA"
> which behaves differently dependent of the class of the
> arguments (value).
>
> If value are a myB object it should append(assign) this
> massvector to the data field of myA object if its any other
> object the assignement function should work as for any list.
>
>
> "[[<-.myA"<-function(mvl,name,value)
> {
> if(class(value)[1]!="myB")
> {
> NextMethod("[[<-"); #work as a list
> }
> else
> {
> mvl$data[[name]] <- value #work as myA
> }
> mvl
> }
>
>
> test<-list(a=1,data=list(1))
> class(test)<-c("myA","list")
>
> duda<-"hello"
> class(duda)<-"myB"
>
> test[[2]]<-duda #works
> test[["newField"]]<-"bella" #nothing happens!!!
>
> The assignment test[["newField"]]<-"bella" has no
effect. The
> list test are not extended by the entry newField. Looks to me
> like NextMethod("[[<-") does nothing.
>
> Is it possible to do this what I try to do with S3?
> If so what i do wrong?
> If its not possible to do this in this way can anyone suggest
> a different solution to what i like to do?
>
> Eryk
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailma> n/listinfo/r-help
>
>