[R-pkg-devel] How to write example results to a tempdir()?

Jennifer Bryan jenny.f.bryan at gmail.com
Thu Apr 26 19:31:40 CEST 2018


One downside of all of this is that examples become increasingly dominated
by code re: tempdir setup and the like.

It may not discourage the people on this list, but I suspect too much extra
machinery makes the typical user less likely to engage with examples.

On Thu, Apr 26, 2018 at 10:04 AM, Henrik Bengtsson <
henrik.bengtsson at gmail.com> wrote:

> On Thu, Apr 26, 2018 at 6:28 AM, Spencer Graves
> <spencer.graves at effectivedefense.org> wrote:
> >
> >
> > On 2018-04-26 07:11, Jose A Guijarro wrote:
> >>
> >> El 25/04/18 a las 20:21, Duncan Murdoch escribió:
> >>>
> >>> On 25/04/2018 1:32 PM, Sarah Goslee wrote:
> >>>>
> >>>> Don't change the working directory! That has all kinds of unpleasant
> >>>> side effects for the unsuspecting user, possibly even more so than
> >>>> writing to a file.
> >>>>
> >>>> Instead, write the file to the temp directory, and read it from there,
> >>>> with e.g.
> >>>>
> >>>> wd <- tempdir()
> >>>> write(dat, file.path(wd, 'Ttest_1981-2000.dat'))
> >>>>
> >>>> Using file.path() means that the appropriate path delimiter for that
> >>>> OS will be used.
> >>>
> >>>
> >>> That's one good way to do it.  But it is possible to change directory
> and
> >>> change back at the end of the example.  For example,
> >>>
> >>> wd <- tempdir()
> >>> savedir <- setwd(wd)
> >>>
> >>> ... # the original code that writes and reads in the current dir
> >>>
> >>> setwd(savedir)
> >>>
> >>> There's a worry that an error in the middle of the code will leave the
> >>> user in the wrong place.  If that's really unlikely to happen, then
> this
> >>> code is a little simpler than Sarah's suggestion.
> >>>
> >>> If it is likely, you can use tryCatch(..., finally = setwd(savedir)),
> but
> >>> I think Sarah's solution would be preferable in most cases:  many
> users will
> >>> not understand what tryCatch() does.
> >
> >
> >
> > Hi, Duncan, et al.:
> >
> >
> >       Under what circumstances should one also use "on.exit":
> >
> >
> > wd <- tempdir()
> > savedir <- setwd(wd)
> > on.exit(setwd(savedir))?
> >
> >
> >       Even senior R programmers may miss a failure mode.  In a function,
> > this works well:  I don't need to remember to "setwd(savedir)" later in
> the
> > code, which could be a problem if I have multiple exit points.  I don't
> know
> > how it would work in a vignette or the examples section of a *.Rd file.
> > tryCatch(..., finally = setwd(savedir)) condenses this into one line ...
> and
> > is too terse for me in many cases.
>
> FWIW, it can also be used in a local() call, e.g.
>
> local({
>   wd <- tempdir()
>   savedir <- setwd(wd)
>   on.exit(setwd(savedir))
>   [...]
> })
>
> /Henrik
>
> >
> >
> >       Spencer Graves
> >
> >
> >>>
> >>> Duncan Murdoch
> >>
> >>
> >> Many thanks for the suggestion! In this way I only need to apply slight
> >> changes in the examples and can avoid modifying all read/writes along
> the
> >> package. I will try this approach and see if it passes the CRAN checks.
> >>
> >> Jose
> >>
> >>>
> >>>>
> >>>> Sarah
> >>>>
> >>>>
> >>>> On Wed, Apr 25, 2018 at 12:30 PM, Jose A Guijarro <
> jguijarrop at aemet.es>
> >>>> wrote:
> >>>>>
> >>>>> Dear all,
> >>>>>
> >>>>> I am struggling to update my package climatol from version 3.0 to
> 3.1.
> >>>>> The old version had all examples under a "dontrun" section because
> they
> >>>>> needed files created by other examples that the user had to run
> first.
> >>>>>
> >>>>> As this is not acceptable anymore, I made the examples runnable and
> >>>>> prepared small ad-hoc datasets, but then writing files to the user
> >>>>> space
> >>>>> is against the CRAN policy rules, and I was suggested to run them on
> a
> >>>>> temporal directory. Therefore I changed all my examples to read/write
> >>>>> files to a tempdir(), as in:
> >>>>>
> >>>>> \examples{
> >>>>> #Set a temporal working directory and write input files:
> >>>>> wd <- tempdir()
> >>>>> setwd(wd)
> >>>>> data(Ttest) #(This loads matrix 'dat' and data.frame 'est.c')
> >>>>> write(dat,'Ttest_1981-2000.dat')
> >>>>>
> >>>>> write.table(est.c,'Ttest_1981-2000.est',row.names=FALSE,col.
> names=FALSE)
> >>>>> rm(dat,est.c) #remove loaded data from memory space
> >>>>> #Now run the example:
> >>>>> dd2m('Ttest',1981,2000)
> >>>>> #Input and output files can be found in directory:
> >>>>> print(wd)
> >>>>> }
> >>>>>
> >>>>> But now CRAN checks return this warning ten times (one for every
> >>>>> example
> >>>>> in the package):
> >>>>>
> >>>>> Warning: working directory was changed to ‘/tmp/RtmpWSRK2F’,
> resetting
> >>>>>
> >>>>> Any hint on how to solve the problem will be highly appreciated...
> >>>>>
> >>>>> Jose
> >>>>>
> >>>>
> >>>>
> >>>
> >>
> >> ______________________________________________
> >> R-package-devel at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-package-devel
> >
> >
> > ______________________________________________
> > R-package-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-package-devel
>
> ______________________________________________
> R-package-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>

	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list