[Rd] S4 method dispatch sometimes leads to incorrect when object loaded from file?

Martin Morgan mtmorgan at fredhutch.org
Tue May 12 17:11:58 CEST 2015


On 05/12/2015 05:31 AM, Martin Maechler wrote:
>>>>>> Martin Morgan <mtmorgan at fredhutch.org>
>>>>>>      on Mon, 11 May 2015 10:18:07 -0700 writes:
>
>      > On 05/10/2015 08:19 AM, Martin Morgan wrote:
>      >> Loading an S4 object from a file without first loading the library sometimes (?,
>      >> the example below and actual example involves a virtual base class and the show
>      >> generic) leads to incorrect dispatch (to the base class method).
>
> "Of course", this is not as desired.
>
> Other code automatically does try and typically succeed to load the package
> (yes "package" ! ;-)) when 'needed', right,  so  show() is an
> exception here, no ?

I added dim() methods, which also misbehave (differently)

   setMethod("dim", "A", function(x) "A-dim")
   setMethod("dim", "B", function(x) "B-dim")

~/tmp$ R --vanilla --slave -e "load('b.Rda'); dim(b)"
Loading required package: PkgA
NULL
~/tmp$ R --vanilla --slave -e "require('PkgA'); load('b.Rda'); dim(b)"
[1] "B-dim"

but sort of auto-heal (versus show, which is corrupted)

~/tmp$ R --vanilla --slave -e "load('b.Rda'); dim(b); dim(b)"
Loading required package: PkgA
NULL
[1] "B-dim"
~/tmp$ R --vanilla --slave -e "load('b.Rda'); b; b"
Loading required package: PkgA
A
A

>
>
>      >> The attached package reproduces the problem. It has
>
>      > The package was attached but stripped; a version is at
>
>      > https://github.com/mtmorgan/PkgA
>
>      > FWIW the sent mail was a multi-part MIME with the header on the package part
>
>      > Content-Type: application/gzip;
>      > name="PkgA.tar.gz"
>      > Content-Transfer-Encoding: base64
>      > Content-Disposition: attachment;
>      > filename="PkgA.tar.gz"
>
>      > From http://www.r-project.org/mail.html#instructions "we allow application/pdf,
>      > application/postscript, and image/png (and x-tar and gzip on R-devel)" so I
>      > thought that this mime type would not be stripped?
>
> You were alright in your assumptions -- but unfortunately, the
> accepted type has been  application/x-gzip instead of .../gzip.
> I now *have* added the 2nd one as well.
>
> Sorry for that.
> The other Martin M..
>
>      > Martin Morgan
>
>      >>
>      >> setClass("A")
>      >> setClass("B", contains="A")
>      >> setMethod("show", "A", function(object) cat("A\n"))
>      >> setMethod("show", "B", function(object) cat("B\n"))
>      >>
>      >> with NAMESPACE
>      >>
>      >> import(methods)
>      >> exportClasses(A, B)
>      >> exportMethods(show)
>      >>
>      >> This creates the object and illustrated expected behavior
>      >>
>      >> ~/tmp$ R --vanilla --slave -e "library(PkgA); b = new('B'); save(b,
>      >> file='b.Rda'); b"
>      >> B
>      >>
>      >> Loading PkgA before the object leads to correct dispatch
>      >>
>      >> ~/tmp$ R --vanilla --slave -e "library(PkgA); load(file='b.Rda'); b"
>      >> B
>      >>
>      >> but loading the object without first loading PkgA leads to dispatch to
>      >> show,A-method.
>      >>
>      >> ~/tmp$ R --vanilla --slave -e "load(file='b.Rda'); b"
>      >> Loading required package: PkgA
>      >> A
>      >>
>      >> Martin Morgan
>
>
>      > --
>      > Computational Biology / Fred Hutchinson Cancer Research Center
>      > 1100 Fairview Ave. N.
>      > PO Box 19024 Seattle, WA 98109
>
>      > Location: Arnold Building M1 B861
>      > Phone: (206) 667-2793
>
>      > ______________________________________________
>      > R-devel at r-project.org mailing list
>      > https://stat.ethz.ch/mailman/listinfo/r-devel
>


-- 
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793



More information about the R-devel mailing list