Hi Michael -- sorry not to respond sooner. The lessons in the StackOverflow post were learned by the mistakes in Biobase; many of the classes there fail to follow its advice. Also, there are a number of packages in Bioconductor that depend on the existing Biobase formulation. Unfortunately, the inertia here is strong.
A work-around might be to write an initialize method for "A" that uses callNextMethod() with an argument versions=, thereby freeing up ... for copy construction. The S4Vectors infrastructure is in many ways a better starting point for new class development. Martin ________________________________________ From: Bioc-devel [[email protected]] on behalf of Stravs, Michael [[email protected]] Sent: Thursday, January 07, 2016 10:41 AM To: [email protected] Subject: [Bioc-devel] Versioned (Biobase) "initialize" method Hi, The "initialize" method of the Versioned class in Biobase is defined in a way that breaks when inheriting classes want to define a copy constructor. Code to reproduce: library(Biobase) setClass("A", representation = representation(var1="integer"), prototype=prototype(var1=integer(), new("Versioned", versions=c(A = "0.1.0"))), contains="Versioned") ia <- new("A") ia2 <- new("A", ia) # "ia" is mapped to the argument "versions" of the Versioned "initialize" method! Full gist snippet including bugfix: https://gist.github.com/meowcat/c51a4260fb710e2fa51a For explanation, see: http://stackoverflow.com/questions/16247583/inheritance-in-r/16248773#16248773 The Versioned class in Biobase has the following "initialize" method: function (.Object, ...) { .local <- function (.Object, versions = list(), ...) { .Object <- callNextMethod(.Object, ...) classVersion(.Object)[names(versions)] <- versions .Object } .local(.Object, ...) } Can you change it as follows: function (.Object, ...) { .local <- function (.Object, ..., versions = list()) { .Object <- callNextMethod(.Object, ...) classVersion(.Object)[names(versions)] <- versions .Object } .local(.Object, ...) } This will fix the problem. Michael Stravs Eawag Umweltchemie BU E 23 �berlandstrasse 133 8600 D�bendorf +41 58 765 6742 [[alternative HTML version deleted]] This email message may contain legally privileged and/or confidential information. If you are not the intended recipient(s), or the employee or agent responsible for the delivery of this message to the intended recipient(s), you are hereby notified that any disclosure, copying, distribution, or use of this email message is prohibited. If you have received this message in error, please notify the sender immediately by e-mail and delete this email message from your computer. Thank you. _______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel
