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

Henrik Bengtsson henrik.bengtsson at gmail.com
Thu Apr 26 19:04:40 CEST 2018


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



More information about the R-package-devel mailing list