[R-pkg-devel] active bindings in package namespace

Gábor Csárdi c@@rd|@g@bor @end|ng |rom gm@||@com
Sat Mar 23 20:14:40 CET 2019


Hi, yet another workaround is to create the active binding in the
.onLoad() function. Here is an example from the cli package:
https://github.com/r-lib/cli/blob/d4756c483f69c2382c27b0b983d0ce7cc7e63763/R/onload.R#L8

Gabor

On Sat, Mar 23, 2019 at 3:50 PM Jack O. Wasey <jack using jackwasey.com> wrote:
>
> Dear all,
>
> I am developing a package which is a front for various online data
> (icd.data https://github.com/jackwasey/icd.data/ ). The current CRAN
> version just has lazy-loaded data, but now the package encompasses far
> more current and historic ICD codes from different countries, these
> can't be included in the CRAN package even with maximal compression.
>
> Other authors have solved this using functions to get the data, with or
> without a local cache of the retrieved data. No CRAN or other packages I
> have found after extensive searching use the attractive active binding
> feature of R.
>
> The goal is simple: for the user to refer to the data by its symbol,
> e.g., 'icd10fr2019', or 'icd.data::icd10fr2019', and it will be
> downloaded and parsed transparently (if the user has already granted
> permission, or after prompt if they haven't).
>
> The bindings are set using commands alongside the function definitions
> in R/*.R .E.g.
>
> makeActiveBinding("icd10cm_latest", .icd10cm_latest_binding, environment())
> lockBinding("icd10cm_latest", environment())
>
> For non-interactive use, CI and CRAN tests, no data should be
> downloaded, and no cache directory set up without user consent. For
> interactive use, I ask permission to create a local data cache before
> downloading data.
>
> This works fine... until R CMD check. The following steps seems to 'get'
> or 'source' everything from the package namespace, which results in
> triggering the active bindings, and this fails if I am unable to get
> consent to download data, and want to 'stop' on this error condition.
>   - checking dependencies in R code
>   - checking S3 generic/method consistency
>   - checking foreign function calls
>   - checking R code for possible problems
>
> Debugging CI-specific binding bugs is a nightmare because these occur in
> different R sessions initiated by R CMD check.
>
> There may be legitimate reasons to evaluate everything in the namespace,
> but I've no idea what they are. Incidentally, Rstudio also does 'mget'
> on the whole package namespace and triggers bindings during
> autocomplete. https://github.com/rstudio/rstudio/issues/4414
>
> Is this something I should raise as an issue with R? Or does anyone have
> any idea of a sensible approach to this. Currently I have a set of
> workarounds, but this complicates the code, and has taken an awful lot
> of time. Does anyone know of any CRAN package which has active bindings
> in the package namespace?
>
> Any ideas appreciated.
>
> Jack Wasey
>
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



More information about the R-package-devel mailing list