Martin, thanks for commenting on the issue. I did not know if this was a 
"feature" and therefore did not post before, but:

in EBImage, BioC, the class Image is derived from array and since 
recently (R2.5) I had a problem with the following constructor: 
new("Image", .Data=data). Finally I had to do res <- new("Image"); 
[EMAIL PROTECTED] <- dat, which worked.

However, what I have problem with, is that R does not have a concept of 
public, private or protected members. Therefore I do not really see why 
.Data should be hidden and why then now and not initially. If this goes 
on this way and there will be no direct access to it, it will simply 
break my whole package.

Best,
Oleg


Martin Morgan wrote:
> An S4 class inheriting from another class with a prototype does not
> inherit (at least sometimes) the prototype for .Data:
> 
>> setClass("A", "numeric", 1)
>> setClass("B", "A")
>> new("A")
> An object of class "A"
> [1] 1
>> new("B")
> An object of class "B"
> numeric(0)
> 
> My expectation is that prototype inheritance of .Data behaves as for
> regular slots:
> 
>> setClass("A",
> +          representation=representation(x="numeric"),
> +          prototype=prototype(x=1))
> [1] "A"
>> setClass("B", "A")
> [1] "B"
>> new("B")
> An object of class "B"
> Slot "x":
> [1] 1
> 
> I think this traces first to an errant ! that claims the data part is
> filled, when it is not yet, and second to a call to getDataPart with a
> primitive that occupies, but does not have, a .Data slot.
> 
> Martin
> 
> --- src/library/methods/R/RClassUtils.R (revision 41426)
> +++ src/library/methods/R/RClassUtils.R (working copy)
> @@ -45,7 +45,7 @@
>      ## try for a single superclass that is not virtual
>      supers <- names(extends)
>      virtual <- NA
> -    dataPartDone <- length(slots)==0 || !is.na(match(".Data", snames))
> +    dataPartDone <- length(slots)==0 || is.na(match(".Data", snames))
>      dataPartClass <- if(dataPartDone) "ANY" else elNamed(slots, ".Data")
>      prototype <- [EMAIL PROTECTED]
>      ## check for a formal prototype object (TODO:  sometime ensure that this 
> happens
> @@ -79,8 +79,15 @@
>              else if(length(slots) > 0) {
>                  for(slotName in slotsi) {
>                      if(identical(slotName, ".Data")) {
> -                        if(!dataPartDone) {
> -                            prototype <- setDataPart(prototype, 
> getDataPart(pri))
> +                        if (!dataPartDone) {
> +                            temp <- getClass(class(pri))@slots
> +                            if (length(temp)==0 ||
> +                                is.na(match(".Data", names(temp)))) {
> +                                prototype <- pri
> +                                attributes(prototype) <- NULL
> +                            } else
> +                                prototype <-
> +                                    setDataPart(prototype, getDataPart(pri))
>                              dataPartDone <- TRUE
>                          }
>                      }
>> sessionInfo()
> R version 2.6.0 Under development (unstable) (2007-05-03 r41426) 
> x86_64-unknown-linux-gnu 
> 
> locale:
> LC_CTYPE=en_US;LC_NUMERIC=C;LC_TIME=en_US;LC_COLLATE=en_US;LC_MONETARY=en_US;LC_MESSAGES=en_US;LC_PAPER=en_US;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US;LC_IDENTIFICATION=C
> 
> attached base packages:
> [1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"  
> [7] "base"     
> 

-- 
Dr Oleg Sklyar | EBI-EMBL, Cambridge CB10 1SD, UK | +44-1223-494466

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

Reply via email to