[Rd] Plans to improve reference classes?

Hadley Wickham h.wickham at gmail.com
Tue Jun 23 17:06:17 CEST 2015


> 1) Is there any example or writeup on the difficulties of extending
> reference classes across packages? Just so I can fully understand the
> issues.

Here's a simple example:

library(scales)
library(methods)

MyRange <- setRefClass("MyRange", contains = "DiscreteRange")
a_range <- MyRange()
a_range$train(1:10)
# Error in a_range$train(1:10) : could not find function "train_discrete"

where train_discrete() is an non-exported function of the scales
package called by the train() method of DiscreteRange.

There are also some notes about portable vs. non-portable R6 classes
at http://cran.r-project.org/web/packages/R6/vignettes/Portable.html

> 2) In what sorts of situations does the performance of reference
> classes cause problems? Sure, it's an order of magnitude slower than
> constructing a simple environment, but those timings are in
> microseconds, so one would need a thousand objects before it started
> to be noticeable. Some motivating use cases would help.

It's a bit of a pathological case, but the switch from RefClasses to
R6 made a noticeable performance improvement in shiny. It's hard to
quantify the impact on an app, but the impact on the underlying
reactive implementation was quite profound: http://rpubs.com/wch/27260
vs  http://rpubs.com/wch/27264

R6 also includes a vignette with detailed benchmarking:
http://cran.r-project.org/web/packages/R6/vignettes/Performance.html

I've added Winston to the thread since he's the expert.

Hadley

-- 
http://had.co.nz/



More information about the R-devel mailing list