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

Duncan Murdoch murdoch.duncan at gmail.com
Wed Apr 25 20:21:28 CEST 2018

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


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.

Duncan Murdoch

> 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

More information about the R-package-devel mailing list