Martin Maechler
2018-Apr-03 09:37 UTC
[Rd] Base R examples that write to current working directory
>>>>> Henrik Bengtsson <henrik.bengtsson at gmail.com> >>>>> on Fri, 30 Mar 2018 10:14:04 -0700 writes:> So, the proposal would then be to write to tempdir(), > correct? If so, I see three alternatives: > 1. explicitly use file.path(tempdir(), filename), or > tempfile() everywhere. I think it should clearly be '1.', as both '2.' and '3.' would need new functionality in R. Ideally we'd get the patch within a day or two, so we can safely apply it also to R 3.5.0 alpha (before it turns beta!). I think the 'eval.path' argument to example() is a nice idea, but also changing its default to tempdir() is definitely out of the question for R 3.5.0. Martin > 2. wrap example code in a withTempDir({ ... }) call. > 3. Add an 'eval.path' (*) argument to example() and make > it default to eval.path = tempdir(). This would probably > be backward compatible and keep the code example clean. > The downside is when a user runs an example and can't > locate produced files. (*) or 'wd', 'workdir', ... > /Henrik > On Fri, Mar 30, 2018 at 9:25 AM, Uwe Ligges > <ligges at statistik.tu-dortmund.de> wrote: >> >> >> On 30.03.2018 00:08, Duncan Murdoch wrote: >>> >>> On 29/03/2018 5:23 PM, Hadley Wickham wrote: >>>> >>>> Hi all, >>>> >>>> Given the recent CRAN push to prevent examples writing >>>> to the working directory, is there any interest in >>>> fixing base R examples that write to the working >>>> directory? A few candidates are the graphics devices, >>>> file.create(), writeBin(), writeChar(), write(), and >>>> saveRDS(). I'm sure there are many more. >>>> >>>> One way to catch these naughty examples would be to >>>> search for unlink() in examples: e.g., >>>> >>>> https://github.com/wch/r-source/search?utf8=?&q=unlink+extension%3ARd&type=. >>>> Of course, simply cleaning up after yourself is not >>>> sufficient because if those files existed before the >>>> examples were run, the examples will destroy them. >>>> >>> >>> Why not put together a patch that fixes these? This >>> doesn't seem to be something that needs discussion, >>> fixing the bad examples would be a good idea. >> >> >> Seconded. CRAN would not accept these base packages, >> hence we should urgently give better examples. >> >> Best, Uwe >> >> >> >>> Duncan Murdoch >>> >>> ______________________________________________ >>> R-devel at r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Gabe Becker
2018-Apr-04 04:16 UTC
[Rd] Base R examples that write to current working directory
Martin et al, I have submitted a patch on bugzilla which fixes all of the examples I could easily find which were not already writing only to temporary files or switching to a temp directory before writing files to the working directory. https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17403 Passes make check-devel so the examples run and the packages that were modified pass check. Best, ~G On Tue, Apr 3, 2018 at 2:37 AM, Martin Maechler <maechler at stat.math.ethz.ch> wrote:> >>>>> Henrik Bengtsson <henrik.bengtsson at gmail.com> > >>>>> on Fri, 30 Mar 2018 10:14:04 -0700 writes: > > > So, the proposal would then be to write to tempdir(), > > correct? If so, I see three alternatives: > > > 1. explicitly use file.path(tempdir(), filename), or > > tempfile() everywhere. > > I think it should clearly be '1.', > as both '2.' and '3.' would need new functionality in R. > > Ideally we'd get the patch within a day or two, so we can safely > apply it also to R 3.5.0 alpha (before it turns beta!). > > I think the 'eval.path' argument to example() is a nice idea, > but also changing its default to tempdir() is definitely out of > the question for R 3.5.0. > > Martin > > > > 2. wrap example code in a withTempDir({ ... }) call. > > > 3. Add an 'eval.path' (*) argument to example() and make > > it default to eval.path = tempdir(). This would probably > > be backward compatible and keep the code example clean. > > The downside is when a user runs an example and can't > > locate produced files. (*) or 'wd', 'workdir', ... > > > /Henrik > > > On Fri, Mar 30, 2018 at 9:25 AM, Uwe Ligges > > <ligges at statistik.tu-dortmund.de> wrote: > >> > >> > >> On 30.03.2018 00:08, Duncan Murdoch wrote: > >>> > >>> On 29/03/2018 5:23 PM, Hadley Wickham wrote: > >>>> > >>>> Hi all, > >>>> > >>>> Given the recent CRAN push to prevent examples writing > >>>> to the working directory, is there any interest in > >>>> fixing base R examples that write to the working > >>>> directory? A few candidates are the graphics devices, > >>>> file.create(), writeBin(), writeChar(), write(), and > >>>> saveRDS(). I'm sure there are many more. > >>>> > >>>> One way to catch these naughty examples would be to > >>>> search for unlink() in examples: e.g., > >>>> > >>>> https://github.com/wch/r-source/search?utf8=?&q=unlink+ > extension%3ARd&type> <https://github.com/wch/r-source/search?utf8=%E2%9C%93&q=unlink+extension%3ARd&type=> > . > >>>> Of course, simply cleaning up after yourself is not > >>>> sufficient because if those files existed before the > >>>> examples were run, the examples will destroy them. > >>>> > >>> > >>> Why not put together a patch that fixes these? This > >>> doesn't seem to be something that needs discussion, > >>> fixing the bad examples would be a good idea. > >> > >> > >> Seconded. CRAN would not accept these base packages, > >> hence we should urgently give better examples. > >> > >> Best, Uwe > >> > >> > >> > >>> Duncan Murdoch > >>> > >>> ______________________________________________ > >>> R-devel at r-project.org mailing list > >>> https://stat.ethz.ch/mailman/listinfo/r-devel > >> > >> > >> ______________________________________________ > >> R-devel at r-project.org mailing list > >> https://stat.ethz.ch/mailman/listinfo/r-devel > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Gabriel Becker, Ph.D Scientist Bioinformatics and Computational Biology Genentech Research [[alternative HTML version deleted]]
Martin Maechler
2018-Apr-04 10:43 UTC
[Rd] Base R examples that write to current working directory
>>>>> Gabe Becker <becker.gabe at gene.com> >>>>> on Tue, 3 Apr 2018 21:16:12 -0700 writes:> Martin et al, > I have submitted a patch on bugzilla which fixes all of the examples I > could easily find which were not already writing only to temporary files or > switching to a temp directory before writing files to the working > directory. https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17403 > Passes make check-devel so the examples run and the packages that were > modified pass check. Thank you very much, Gabe, I've committed most of it now (to R-devel only, to be ported to 3.5.0 alpha, later). There are some issues I've wanted to postpone and open for discussion, e.g., here (on R-devel): https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17403#c3 : 1) All(?) the file-based graphics devices have a default file name which resides in the current working directory, pdf(), postscript(), png(), ..., and pictex(). We may think that this *default* should be changed, rather than the documentation, e.g., for pictex() , from "Rplots.tex" to tempfile("Rplots.tex") 2) The write() function, for 30 years back compatibility with S, has a default 'file = "data"' Should we change the default to use "", the same as write.table() uses, or also something tempfile() based? https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17403#c4 : 3) prompt() and promptData() [and possibly other prompt*()] : I did not apply your proposed changes here, see the R-bugzilla for reasoning. Still one may want to propose changing the default behavior from using the getwd() working directory to tempdir() instead. Martin > On Tue, Apr 3, 2018 at 2:37 AM, Martin Maechler <maechler at stat.math.ethz.ch> > wrote: >> >>>>> Henrik Bengtsson <henrik.bengtsson at gmail.com> >> >>>>> on Fri, 30 Mar 2018 10:14:04 -0700 writes: >> >> > So, the proposal would then be to write to tempdir(), >> > correct? If so, I see three alternatives: >> >> > 1. explicitly use file.path(tempdir(), filename), or >> > tempfile() everywhere. >> >> I think it should clearly be '1.', >> as both '2.' and '3.' would need new functionality in R. >> >> Ideally we'd get the patch within a day or two, so we can safely >> apply it also to R 3.5.0 alpha (before it turns beta!). >> >> I think the 'eval.path' argument to example() is a nice idea, >> but also changing its default to tempdir() is definitely out of >> the question for R 3.5.0. >> >> Martin >> >> >> > 2. wrap example code in a withTempDir({ ... }) call. >> >> > 3. Add an 'eval.path' (*) argument to example() and make >> > it default to eval.path = tempdir(). This would probably >> > be backward compatible and keep the code example clean. >> > The downside is when a user runs an example and can't >> > locate produced files. (*) or 'wd', 'workdir', ... >> >> > /Henrik >> >> > On Fri, Mar 30, 2018 at 9:25 AM, Uwe Ligges >> > <ligges at statistik.tu-dortmund.de> wrote: >> >> >> >> >> >> On 30.03.2018 00:08, Duncan Murdoch wrote: >> >>> >> >>> On 29/03/2018 5:23 PM, Hadley Wickham wrote: >> >>>> >> >>>> Hi all, >> >>>> >> >>>> Given the recent CRAN push to prevent examples writing >> >>>> to the working directory, is there any interest in >> >>>> fixing base R examples that write to the working >> >>>> directory? A few candidates are the graphics devices, >> >>>> file.create(), writeBin(), writeChar(), write(), and >> >>>> saveRDS(). I'm sure there are many more. >> >>>> >> >>>> One way to catch these naughty examples would be to >> >>>> search for unlink() in examples: e.g., >> >>>> >> >>>> https://github.com/wch/r-source/search?utf8=?&q=unlink+ >> extension%3ARd&type >> <https://github.com/wch/r-source/search?utf8=%E2%9C%93&q=unlink+extension%3ARd&type=> >> . >> >>>> Of course, simply cleaning up after yourself is not >> >>>> sufficient because if those files existed before the >> >>>> examples were run, the examples will destroy them. >> >>>> >> >>> >> >>> Why not put together a patch that fixes these? This >> >>> doesn't seem to be something that needs discussion, >> >>> fixing the bad examples would be a good idea. >> >> >> >> >> >> Seconded. CRAN would not accept these base packages, >> >> hence we should urgently give better examples. >> >> >> >> Best, Uwe >> >> >> >>> Duncan Murdoch > -- > Gabriel Becker, Ph.D > Scientist > Bioinformatics and Computational Biology > Genentech Research
Possibly Parallel Threads
- Base R examples that write to current working directory
- Base R examples that write to current working directory
- Base R examples that write to current working directory
- Base R examples that write to current working directory
- check does not check that package examples remove tempdir()