Thanks both, this is helpful advice. On 3/23/19 5:14 PM, Kirill Müller wrote: > Dear Jack > > > This doesn't answer your question, but I would advise against this design. > > - Users do not expect side effects (such as network access) from accessing a > symbol. > > - A function gives you much more flexibility to change the interface later > on. (Arguments for fetching the data, tokens for API access, ...) > > - You already encountered a few quirks that make this an "interesting" > problem. > > A function call only needs a pair of parentheses. > > > Best regards > > Kirill > > > On 23.03.19 16:50, Jack O. Wasey 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@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-package-devel
______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel