Dear R core team

Please apologize for posting the same question twice on R-help and
R-devel. Since I was not sure which list is appropriate I tried R-help (Tue
Mar 22), but got no answer.  
Now I do not know if the formulation of my question was unclear or the
question is not so easy to answer or to easy (what I do not hope).

My problem: I create a new S4 class, containing one slot, data (of class
            POSIXlt). I tried to define a transformation via setAs()
            between the new S4 class and the existing "POSIXlt" class that is 
            virtual S4 Class with subclass "POSIXt".
            Then using as() gives an error message (see code below) when I
            transform from "POSIXlt" to the new class.
            Then I defined another as() from the subclass "POSIXt" to the
            new class and now everything works well.

This is the point where I do not understand what happens and why it works
like this. I'd be happy for some hints to improve my understanding (maybe
there is a help page or a reference).
I'd be happy with a confirmation of a better connoisseur of R than me, that
it is not so easy to understand, but correct, if that's the case. Thank you
very much.
Below I attached my R code.

Regards, 

Christoph Buser

--------------------------------------------------------------
Christoph Buser <[EMAIL PROTECTED]>
Seminar fuer Statistik, LEO C11
ETH (Federal Inst. Technology)  8092 Zurich      SWITZERLAND
phone: x-41-1-632-5414          fax: 632-1228
http://stat.ethz.ch/~buser/
--------------------------------------------------------------

## R Code:

## Definition of my new S4 class
setClass("dtime",
         representation(data = "POSIXlt"),
         prototype(data = as.POSIXlt("2004/06/01")))

## Transformation between the new class "dtime" and "POSIXlt"
setAs("dtime", "POSIXlt", def = function(from) {
  [EMAIL PROTECTED]
})
setAs("POSIXlt", "dtime", def = function(from) {
  new("dtime", data = from)
})

## Create a new "dtime" object
(x1 <- new("dtime"))
str(x1)
## Transformation from "dtime" to "POSIXlt" works well
(y1 <- as(x1, "POSIXlt"))
str(y1)

## Create a new "POSIXlt" object
(y2 <- as.POSIXlt("2004/06/01"))
str(y2)
## Transformation from "POSIXlt" to "dtime" fails
as(y2, "dtime")
> Fehler in insertMethod(methods, sig, args, def, TRUE) : 
        inserting method into non-methods-list object (class "NULL")

## This works properly
new("dtime", data = y2)

## Now I put another setAs for the Subclass "POSIXt"
setAs("POSIXt", "dtime", def = function(from) {
  new("dtime", data = from)
})

## Now the transformation to "dtime" class works
as(y2, "dtime")

## I am using:
> version
platform i686-pc-linux-gnu
arch     i686             
os       linux-gnu        
system   i686, linux-gnu  
status   alpha            
major    2                
minor    1.0              
year     2005             
month    03               
day      24               
language R

______________________________________________
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to