Hi!

I am open to any arbitrary way of extending a list. It does not matter to me how 
complicated it gets. I do it once for my class.
What matters to me is what I can do with objects extending from list. Because this is 
what I am doing often.
Hence,  further proposals even more complicated are wellcome.

The problem with as(mylist,"list") I would say we sorted out temporarily. Thanks.

Whats next are the following set of examples that does not work.
At least one of the following calls fails with any of thy proposed implementation 
patterns on version of R1.9.1 or R2.0.0.


#Example of manipulating the list part of the object. 
as(mylist,"list") <- lapply(mylist,"+",3)
as(mylist,"list") <- mylist[2:4]                                        #was working 
on 1.9.1 patched. Does not work on 2.0.0 alpha *
as(mylist,"list") <- as(mylist,"listNamed")[2:4]                        #was working 
on 1.9.1 patched. Does not work on 2.0.0 alpha.*


#what does not work is assigning shorter lists without names. Seems like a bug. Or is 
there an explanation.
as(mylist,"list")<-as.list(1:5)                                         #was working 
on 1.9.1. Is working on 2.0.0 even if the list has no names.
as(mylist,"list")<-as.list(1:4)                                 #is not working on 
1.9.1 2.0.0

*A little different implementation of inheritance.

The samples above almost work, except the last two on 1.9.1 with one of the 
implementation patterns for inheritance.
Is intended to support such assignments automatically?

Almost non of them is working with the newest version of R.2.0.0 as you can easily 
reproduce running the code belowe.

As I understand I can provide by myself an assignemnt replace function by setAs. 
(I got all the examples above working working in this way on 1.9.1 
-> using the property that as long as shorter list has names has names it can be 
assigned and the following setAs function).

        ,replace=function(from,value)
        {
                if(is.null(attributes(value)$names))
                        attributes(value)$names<-character(0)

                [EMAIL PROTECTED] <- value
                [EMAIL PROTECTED]<-names(value)
                from    
        }

It was not easy because  .mergeAttrs()  was complaining for a while.
Now there is NO chance to build this work arround. Because now the assignment does not 
work for lists with names of shorter length.

I dont think that it is neccessary as it is now (?) that a class which extends a basic 
class has already an appropriate as<- method. They do not work.
Its seems quite easy provide an setAs method or setIs method. But not for a class 
extending from "list". Probably I am naive.

As I realise that this assignments will work on R2.0.0, I happily also realise that 
inheritance from old type classes is probably not important.
I can provide a method as.list for myclass and so myclass should work with all 
possible functions working on lists because they call "as.list" first in most cases.

Sincerely yours
Eryk.

The not working code example.
setClass("listNamed", contains="list",representation(names="character"))

setAs("listNamed", "list", function(from) {
   if(strict) class(from) <- "list"
   from
   })

setMethod("show"
          ,"listNamed",
          def = function(object) {
              cat("An object of class ", class(object), "\n", sep="")
              show(as(object, "list"))
          })
                                                                                       
                                                                                       
                                                              
                                        #NAIVE inheritance from list.
                                        #define cass

setClass("Mlist"
         ,representation(info="character") #uniq names have to be unique?
         ,contains="listNamed"
         )
         
tmp <- as.list(1:4)
names(tmp) <- letters[1:4]
mylist<-new("Mlist" , tmp , info="numeric" )
mylist
                                                                                       
                                                                                       
                                                              
#Example of manipulating the list part of the object. 
as(mylist,"list") <- lapply(mylist,"+",3)
as(mylist,"list") <- mylist[2:4]
as(mylist,"list") <- as(mylist,"listNamed")[2:4]


#what does not work is assigning shorter lists without names. Seems like a bug. Or is 
there an explanation.
as(mylist,"list")<-as.list(1:5)
as(mylist,"list")<-as.list(1:4)


setAs("listNamed", "list", function(from) {
   if(strict) class(from) <- "list"
   from
   }
   ,replace=function(from,value)
   {
        print("replace")
        print(class(value))
        [EMAIL PROTECTED]<- value
        [EMAIL PROTECTED]<- names(value)
        from
   }
   )

#Example of manipulating the list part of the object. 
as(mylist,"list") <- lapply(mylist,"+",3)
as(mylist,"list") <- mylist[2:4]
as(mylist,"list") <- as(mylist,"listNamed")[2:4]


#what does not work is assigning shorter lists without names. Seems like a bug. Or is 
there an explanation.
as(mylist,"list")<-as.list(1:5)
as(mylist,"list")<-as.list(1:4)

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to