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.bengts...@gmail.com> wrote: > On Thu, Apr 26, 2018 at 6:28 AM, Spencer Graves > <spencer.gra...@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 < > jguijar...@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@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 > > ______________________________________________ > R-package-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-package-devel > [[alternative HTML version deleted]] ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel