Base R examples that write to current working directory

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Base R examples that write to current working directory

hadley wickham
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.

Hadley

--
http://hadley.nz

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Base R examples that write to current working directory

Duncan Murdoch-2
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.

Duncan Murdoch

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Base R examples that write to current working directory

Uwe Ligges-3


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
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Base R examples that write to current working directory

Henrik Bengtsson-5
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.

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
<[hidden email]> 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
>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Base R examples that write to current working directory

Martin Maechler
>>>>> Henrik Bengtsson <[hidden email]>
>>>>>     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
    > <[hidden email]> 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
    >>>
    >>> ______________________________________________
    >>> [hidden email] mailing list
    >>> https://stat.ethz.ch/mailman/listinfo/r-devel
    >>
    >>
    >> ______________________________________________
    >> [hidden email] mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel

    > ______________________________________________
    > [hidden email] mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Base R examples that write to current working directory

Gabe Becker
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 <[hidden email]>
wrote:

> >>>>> Henrik Bengtsson <[hidden email]>
> >>>>>     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
>     > <[hidden email]> 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
>     >>>
>     >>> ______________________________________________
>     >>> [hidden email] mailing list
>     >>> https://stat.ethz.ch/mailman/listinfo/r-devel
>     >>
>     >>
>     >> ______________________________________________
>     >> [hidden email] mailing list
>     >> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>     > ______________________________________________
>     > [hidden email] mailing list
>     > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> [hidden email] 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]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Base R examples that write to current working directory

Martin Maechler
>>>>> Gabe Becker <[hidden email]>
>>>>>     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 <[hidden email]>
    > wrote:

    >> >>>>> Henrik Bengtsson <[hidden email]>
    >> >>>>>     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
    >> > <[hidden email]> 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

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel