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
[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 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? 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? 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 > >
John Chambers 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. >A footnote on this. ALL packages need to be reinstalled--including stats4 in the R source. Otherwise that package will fail when used in the tests. I was bitten by this myself today. Advice from members of r-core more expert in the innards, suggests that the best thing to do is make clean in the directory where you are building R, if you have previously built R there, before making the new version of R.> 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 > >