[Bioc-devel] Best Practices for Renaming S4 Slots

Vincent Carey @tvjc @end|ng |rom ch@nn|ng@h@rv@rd@edu
Fri Oct 15 19:31:11 CEST 2021


I will defer to Herve about all details, but I would say that this level of
change control is implied by the "no changes
to package API without an interval of deprecation spanning at least one
release".  See https://bioconductor.org/developers/how-to/deprecation/
That text mentions that removal may take 18 months.

Whatever is exposed cannot be changed without a deprecation period,
in which the functionality is preserved, but notification is given to
users/developers, through .Deprecated, that
functionality will change and advice is given on the alternate approach to
be used.

Is a slot name part of the API?  It isn't completely obvious, but in the
case of serialized objects, it turns out that it is.
I don't know that our guidelines have sufficient details on this process,
but we welcome your input on where to
best outline/advertise this.

On Fri, Oct 15, 2021 at 1:22 PM Chris Eeles <christopher.eeles using outlook.com>
wrote:

> Message received. I will leave that branch for later. Is this information
> available on the Bioconductor website at all? It would have been useful to
> find out sooner.
>
> Best,
> Chris
>
> -----Original Message-----
> From: Bioc-devel <bioc-devel-bounces using r-project.org> On Behalf Of Chris
> Eeles
> Sent: October 15, 2021 1:10 PM
> To: Hervé Pagès <hpages.on.github using gmail.com>; bioc-devel using r-project.org
> Subject: Re: [Bioc-devel] Best Practices for Renaming S4 Slots
>
> Thanks Herve,
>
> I actually got the updateObject method working after sending this email,
> but thanks for the information. Maybe it is worth adding a section on this
> topic to the Bioconductor developer section?
>
> Unfortunately, I was unaware that the start of development cycle was the
> best time to implement this change. I am currently planning to have this
> done for the 3.14 release.
>
> I am introducing new accessors as well but keeping the old ones for
> backwards compatibility using aliases.
>
> How discouraged are slot name changes in a release? A lot of the changes
> on our road map require the slots to be renamed so it would significantly
> delay required features if I were to wait.
>
> I plan to put in the work so that those using accessors shouldn't notice a
> difference.
>
> Best,
> Chris
>
> -----Original Message-----
> From: Hervé Pagès <hpages.on.github using gmail.com>
> Sent: October 15, 2021 12:39 PM
> To: Chris Eeles <christopher.eeles using outlook.com>; bioc-devel using r-project.org
> Subject: Re: [Bioc-devel] Best Practices for Renaming S4 Slots
>
> Hi Chris,
>
> There was some formatting issues with my previous answer so I'm sending it
> again. Hopefully this time the formatting is better. See below.
>
> On 14/10/2021 13:08, Chris Eeles wrote:
> > Hello BioC community,
> >
> > I am the lead developer for the CoreGx, PharmacoGx, RadioGx and ToxicoGx
> packages. We have recently been working on major updates to the structure
> of a CoreSet, which is inherited by the main class in all three of the
> other packages listed.
> >
> > While making these changes, we would like to rename some CoreSet slots
> to increase the amount of code that can be refactored into CoreGx,
> simplifying maintenance and development of inheriting packages in the
> future.
> >
> > The slot names and their accessors will be made more generic, for
> example the 'cell' slot will become 'sample' to allow a CoreSet derived
> class to store Biological model systems other than cancer cell lines.
> Similarly, 'drug' or 'radiation' slots in inheriting packages will be
> replaced with a 'treatment' slot in the CoreSet. This will allow us to
> simplify inheritance, removing much redundant code from the inheriting
> packages and setting us up to integrate other lab packages, such as Xeva
> for PDX models, into the general CoreSet infrastructure.
> >
> > I took a brief look through the Bioconductor developer documentation but
> didn't see anything talking about best practices for renaming slots.
> >
> > It is easy enough to make the code changes, but my major concern is
> being able to update existing objects from these packages to use the new
> slot names.
> >
> > I am aware of the updateObject function in BiocGenerics, but tried using
> it to update some example data in CoreGx without success.
> >
> > Is this the proper function to use when you wish to update an S4 object
> whose class definition has been modified? If not, is there existing
> infrastructure for accomplishing this task?
>
> Yes updateObject() is the proper function to use but the function has no
> way to guess how to fix your objects. The way you tell it what to do is by
> implementing methods for your objects.
>
> For example if you renamed the 'cell' slot -> 'sample', your
> updateObject() method will be something like this:
>
>
> setMethod("updateObject", "CoreSet",
>      function(object, ..., verbose=FALSE)
>      {
>          ## The "cell" slot was renamed -> "sample" in CoreGx_1.7.1.
>          if (.hasSlot(object, "cell")) {
>              object <- new("CoreSet",
>                            sensitivity=object using sensitivity,
>                            annotation=object using annotation,
>                            molecularProfiles=object using molecularProfiles,
>                            sample=object using cell,
>                            datasetType=object using datasetType,
>                            perturbation=object using perturbation,
>                            curation=object using curation)
>              return(object)
>          }
>          object
>      }
> )
>
> The best time to do this internal renaming is at the beginning of the BioC
> 3.15 development cycle (i.e. right after the 3.14 release).
>
> If in the future, other slots get renamed or added, you'll need to modify
> the updateObject() method above like this:
>
> setMethod("updateObject", "CoreSet",
>      function(object, ..., verbose=FALSE)
>      {
>          ## The "cell" slot was renamed -> "sample" in CoreGx_1.7.1.
>          if (.hasSlot(object, "cell")) {
>              object <- new("CoreSet",
>                            sensitivity=object using sensitivity,
>                            annotation=object using annotation,
>                            molecularProfiles=object using molecularProfiles,
>                            sample=object using cell,
>                            datasetType=object using datasetType,
>                            perturbation=object using perturbation,
>                            titi=object using curation)  # use "titi" here too!
>              return(object)
>          }
>          ## The "curation" slot was renamed -> "titi" in CoreGx_1.9.1.
>          if (.hasSlot(object, "curation")) {
>              object <- new("CoreSet",
>                            sensitivity=object using sensitivity,
>                            annotation=object using annotation,
>                            molecularProfiles=object using molecularProfiles,
>                            sample=object using sample,  # use "sample" here!
>                            datasetType=object using datasetType,
>                            perturbation=object using perturbation,
>                            titi=object using curation)
>              return(object)
>          }
>          object
>      }
> )
>
> And so on...
>
> Hope this helps,
> H.
>
>
> >
> > Any tips for implementing slot renaming, as well as links to existing
> documentation or articles on the topic would be appreciated.
> >
> > Best,
> > ---
> > Christopher Eeles
> > Software Developer
> > BHK
> > Laboratory<https://na01.safelinks.protection.outlook.com/?url=http%3A%
> > 2F%2Fwww.bhklab.ca%2F&data=04%7C01%7C%7C170e009bdbda4e7f182308d990
> > 000468%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637699152031882488
> > %7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6I
> > k1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=eu7jm6LiWISZ01etllrdipTAkVtI4a7
> > rZumELnt0siI%3D&reserved=0> Princess Margaret Cancer
> > Centre<https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
> > 2Fwww.pmgenomics.ca%2Fpmgenomics%2F&data=04%7C01%7C%7C170e009bdbda
> > 4e7f182308d990000468%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C6376
> > 99152031882488%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2l
> > uMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=g8gXrDgyJ5YRHdiBv
> > q77WiDkCgWcYhWWW9R7OWKMxqw%3D&reserved=0>
> > University Health
> > Network<https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%
> > 2Fwww.uhn.ca%2F&data=04%7C01%7C%7C170e009bdbda4e7f182308d990000468
> > %7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637699152031882488%7CUnk
> > nown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWw
> > iLCJXVCI6Mn0%3D%7C1000&sdata=IJKtucTmctj0z227jGpqnBeZ0D9ruvODNLkmT
> > QBdX%2Bs%3D&reserved=0>
> >
> >
> >       [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > Bioc-devel using r-project.org mailing list
> > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.
> > ethz.ch%2Fmailman%2Flistinfo%2Fbioc-devel&data=04%7C01%7C%7C170e00
> > 9bdbda4e7f182308d990000468%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%
> > 7C637699152031882488%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQI
> > joiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=nNq88Xhpby%
> > 2FVJxZ%2BdBWPk72Cp%2FS3EsaFgQ3FhrkaaH4%3D&reserved=0
> >
>
> --
> Hervé Pagès
>
> Bioconductor Core Team
> hpages.on.github using gmail.com
>
> _______________________________________________
> Bioc-devel using r-project.org mailing list
>
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fbioc-devel&data=04%7C01%7C%7C170e009bdbda4e7f182308d990000468%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637699152031882488%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=nNq88Xhpby%2FVJxZ%2BdBWPk72Cp%2FS3EsaFgQ3FhrkaaH4%3D&reserved=0
>
> _______________________________________________
> Bioc-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>

-- 
The information in this e-mail is intended only for the ...{{dropped:18}}



More information about the Bioc-devel mailing list