[R-pkg-devel] Examples taking too long depend on object that takes a while to generate
Martin Maechler
m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Thu Sep 15 16:21:48 CEST 2022
>>>>> John Harrold
>>>>> on Thu, 15 Sep 2022 05:11:15 -0700 writes:
> Not to be pedantic but it's not a dataset per-se. It's an R object that the
> examples need.
Yes.
(and see below)
> On Thu, Sep 15, 2022 at 2:49 AM Duncan Murdoch <murdoch.duncan using gmail.com>
> wrote:
>> On 15/09/2022 5:29 a.m., Martin Maechler wrote:
>> >>>>>> Duncan Murdoch
>> >>>>>> on Thu, 15 Sep 2022 04:42:04 -0400 writes:
>> >
>> > > On 15/09/2022 3:45 a.m., Martin Maechler wrote:
>> > >>>>>>> Duncan Murdoch
>> > >>>>>>> on Wed, 14 Sep 2022 13:02:28 -0400 writes:
>> > >>
>> > >> > On 14/09/2022 12:43 p.m., Ivan Krylov wrote:
>> > >> >> On Wed, 14 Sep 2022 12:31:49 -0400
>> > >> >> Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>> > >> >>
>> > >> >>> It's also possible to put .R files in the data directory, and they
>> > >> >>> are executed to create the data object. I think that happens at the
>> > >> >>> time when you call data() rather than at install time, so it might
>> > >> >>> not be helpful.
>> > >> >>
>> > >> >> Some time ago I was hoping to compress a package of mine by generating a
>> > >> >> dataset during a data() call instead loading it from an .rda file, but
>> > >> >> it turned out that the .R file is executed during R CMD build:
>> > >> >>
>> https://github.com/r-devel/r-svn/blob/03df313ad37456c6a62158328d4e373408ce4d59/src/library/tools/R/build.R#L794
>> > >>
>> > >> > Thanks for that info. That's not good for John, because the
>> > >> > architecture isn't known at build time.
>> > >>
>> > >> > Duncan Murdoch
>> > >>
>> > >> Sorry to muddy the water, but what *is* "build time"?
>> > >> There's the big difference between building
>> > >> 1) a Source tarball and
>> > >> 2) a MacOS or Windows binary package
>> > >>
>> > >> Unfortunately, the two situations are very different notably in
>> > >> this case, where '(2)' is really much closer to the
>> > >> "install time" you mention.
>> > >>
>> >
>> > > I meant building the tarball, and assumed that was what Ivan was talking
>> > > about as well.
>> >
>> > > Duncan Murdoch
>> >
>> > Ok, thank you, for the clarification.
>> >
>> > Note that `R CMD build --help` mentions (among more)
>> >
>> > --resave-data= re-save data files as compactly as possible:
>> > "no", "best", "gzip" (default)
>> > --no-resave-data same as --resave-data=no
>> >
>> > so when building the package,
>> > Ivan should get what he wanted with
>> >
>> > R CMD build --no-resave-data <pkg>
>> >
>> > no ?
>>
>> It's actually John Harrold who has the problem: a dataset that he wants
>> to use in examples that takes a long time to build, causing his examples
>> to exceed the CRAN 5 second limit.
>>
>> So what I was suggesting is that he should arrange for it to be created
>> before running the example; the problem is that the dataset depends on
>> the architecture of the machine that's running the example. To follow
>> my suggestion he would need to have the dataset created when the package
>> was installed (or the binary was built).
and now John can use the data() "trick" Ivan recommended *if*
John builds his source tar ball using
R CMD build --no-resave-data
*and* puts the code that creates the R object into a <his_pkg>/data/myRobj.R file
*and* adds a
data(myRobj)
into his .onLoad() hook.
This would *not* create the object at package installation time
but each time the package is loaded .. which is at least only
once for all the examples in R CMD check <his_pkg>
OTOH, I do agree with you Duncan, that in this case your
suggestion seems preferable and we add the R code which creates
the object somewhere "nakedly" in <his_pkg>/R/zzz.R {zzz: to be alphabetically last}
and hence the object would live (hidden) in his_pkg namespace.
He'd ideally also provide an *exported* function, say
myData <- function(name = "<name_of_his_object>") get(name, asNamespace("<his_pkg>"))
and then would use myData() {or myData(".....") } in his
package examples.
More information about the R-package-devel
mailing list