[Rd] S4 Methods dispatch

Duncan Murdoch murdoch at stats.uwo.ca
Wed Aug 30 19:48:33 CEST 2006


On 8/30/2006 1:35 PM, John Chambers wrote:
> Henrik Bengtsson wrote:
>> [Cross-posting to BioC-devel to]
>>
>> Thank you for this.
>>
>>> The changes are internal but extensive.  All packages that use S4
>>> methods and classes need to be reinstalled from source to use the new
>>> version.
>>
>> Is there an easy way to detect if a package is using S4 or not?
> 
> If you have your package source in various directories under a single 
> directory (which is how I usually work), then, from the directory above 
> the package directories, the comand:
>      grep "Depends:.*methods" */DESCRIPTION
> will pick up the packages that declare a dependency on methods.  There 
> may be cleaner techniques.

This does the same within R:

 > pkgs <- installed.packages()
 > pkgs[grep("methods", pkgs[,"Depends"]),]

Duncan Murdoch

>> If
>> so, I could scan my already installed libraries and call
>> install.packages() on its S4 subset of packages.  The alternative is
>> to do install.packages() an all libraries (sic!).  Bioconductor: maybe
>> biocLite() could have such an update mechanism built in internally?
>>
>> If I miss to reinstall one S4 package, what should I expect?
> 
> The typical symptom is a clutch of warning messages when you attach the 
> package.  The warnings try to mention that the package may need 
> reinstallling, though sometimes the package name is misleading.
> 
>> I assume
>> there will be an error, but I just want to confirm that there is no
>> risk of getting weird "results" but still a running program?
>>
>> Reinstallation is also required for all package that comes as Windows
>> binaries, correct?
> Anything that uses S4 methods will have out-of-date objects for class 
> and method definitions.
> 
> John
>>
>> Best
>>
>> Henrik
>>
>> On 8/30/06, John Chambers <jmc at r-project.org> wrote:
>>> A revision of r-devel 2.4.0 is being committed today with changes to
>>> method and class management.
>>>
>>> The changes are internal but extensive.  All packages that use S4
>>> methods and classes need to be reinstalled from source to use the new
>>> version.
>>>
>>> The main effects are to speed up method caching and dispatch, and to fix
>>> some problems with selecting inherited methods.  The new design is also
>>> cleaner, so we can experiment more easily in the future with changes for
>>> efficiency or semantics.
>>>
>>> The change will mostly be noticeable in attaching packages with many
>>> methods.  The CPU time for attaching package Matrix, for example, goes
>>> down by about a factor of 7 compared to R 2.3.1, timed on a Mac G5.
>>>
>>> The other major change is that now _all_ inherited methods are examined
>>> and one of the closest matches is chosen.  The old selection took the
>>> first candidate found, so the current version is better defined, and
>>> will also let us experiment with various tuning & strategies.
>>>
>>> There is a draft paper describing method selection at
>>>   http://developer.r-project.org/howMethodsWork.pdf
>>> (It's a document in progress, so go back in a few days for a revised
>>> version.)
>>>
>>> If a package uses inheritance for method selection with multiple
>>> arguments, there may well be changes in behavior.  We found examples in
>>> both methods itself and in Matrix that needed attention.
>>>
>>> John
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>
>>
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list