I think it's always difficult and sometimes impossible to take an existing session and convert it to the vanilla state, but it's very easy to run a new instance of R from an existing one.

So instead of a clearws() function, I'd suggest a "runInVanilla" function, that takes some code as input, starts up a vanilla session and collects the output.

This is quite similar to what reprex::reprex does, maybe not different at all.

Duncan Murdoch

On 22/01/2021 10:37 a.m., J C Nash wrote:
Thanks Duncan for a clear argument about the "why".

The suggestion of R --vanilla started a train of thought that one could do 
something like

  clearws <- function(){ # Try to clear workspace
    tmp <- readline("Are you sure you want to clear the workspace? ")
    print(tmp)
    if ( substr(toupper(tmp),1,1) != "Y" ){
        return(0)
    }
    #  rm(tmp)
    tgt<-parent.env(environment())
    print(ls(tgt))
    rm(list = ls(tgt, all.names = TRUE),envir=tgt) #will clear all objects 
includes hidden objects.
    gc() #free up memrory and report the memory usage.
    # What should we return?
    # Can we offer interactive control?
    # How about packages?
  }

and call clearws() at the start of an example.

Contact me off-list if you have suggestions for improving this. I'd like to be 
able to preface
examples with such a function that would render the session "vanilla" but from 
inside. That means
removing packages that might have altered / replaced / masked standard 
functions. That might not
be possible, but the idea is attractive to me as someone who mostly uses R in 
tests of tools that
get used by others.

Best, JN


On 2021-01-21 6:05 p.m., Duncan Murdoch wrote:
On 21/01/2021 5:20 p.m., J C Nash wrote:
In a separate thread Jeff Newmiller wrote:
rm(list=ls()) is a bad practice... especially when posting examples. It doesn't 
clean out everything and it removes
objects created by the user.

This query is to ask

1) Why is it bad practice to clear the workspace when presenting an example?
I'm assuming here that people who will try R-help examples will not run them in 
the
middle of something else, which I agree would be unfortunates.

I think that's exactly the concern.  I doubt it would have happened in this 
instance, but in other cases, people might
copy and paste a complete example before reading it.  It's safer to say:  "Run this 
code in a clean workspace:", rather
than cleaning it out yourself.

Duncan Murdoch


However, one of the
not very nice aspects of R is that it is VERY easy to have stuff hanging around 
(including
overloaded functions and operators) that get you into trouble, and indeed make 
it harder
to reproduce those important "minimal reproducible examples".  This includes 
the .RData
contents. (For information, I can understand the attraction, but I seem to have 
been
burned much more often than I've benefited from a pre-warmed oven.)

2) Is there a good command that really does leave a blank workspace? For testing
purposes, it would be useful to have an assured blank canvas.

Yes, start R with

   R --vanilla

Duncan Murdoch


This post is definitely not to start an argument, but to try to find ways to 
reduce
the possibilities for unanticipated outcomes in examples.

Cheers, JN

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to