[Rd] odd assignInNamespace / setGeneric interaction

Martin Maechler maechler at stat.math.ethz.ch
Thu Apr 19 11:33:36 CEST 2018

>>>>> Michael Lawrence <lawrence.michael at gene.com>
>>>>>     on Wed, 18 Apr 2018 14:16:37 -0700 writes:

    > Hi Bill,
    > Ideally, your coworker would just make an alias (or shortcut or
    > whatever) for R that passed --no-save to R. I'll try to look into this
    > though.

    > Michael

Yes, indeed!

As some of you know, I've been using R (for ca 23 years now)
almost only from ESS (Emacs Speaks Statistics).

There, I've activated '--no-save' for ca 20 years or so,
nowadays (since Emacs has adopted "custom") I have had this in
my ~/.emacs  custom lines 

 '(inferior-R-args "--no-restore-history --no-save ")

standalone (to paste into your own ~/.emacs ) :

(custom-set-variables '(inferior-R-args "--no-restore-history --no-save "))


The current fashionable IDE to R,
Rstudio, also allows to set such switches by its GUI:

Menu [Tools]
  --> (bottom) entry [Global Options]
    --> the first sidebar entry  [R General]:
    Look for two lines mentioning "workspace" or ".RData" and
    change to 'save never' ( == --no-save),
    and nowadays I also recommend my students to not *read*
    these, i.e., '--no-restore'


@Michael: I'm not sure what you're considering.  I feel that in
 general, there are already too many R startup tweaking
 possibilities, notably via environment variables.
[e.g., the current ways to pre-determine the active .libPaths() in R, 
 and the fact the R calls R again during 'R CMD check' etc,
 sometimes drives me crazy when .libPaths() become incompatible
 for too many reasons .... yes, I'm diverting: that's another story]

If we'd want to allow using (yet  another!) environment variable
here, I'd at least would  make sure they are not consulted when
explicit --no-save or --vanilla, etc are used.


    > On Wed, Apr 18, 2018 at 1:38 PM, William Dunlap via R-devel
    > <r-devel at r-project.org> wrote:
    >> A coworker got tired of having to type 'yes' or 'no' after quitting R: he
    >> never wanted to save the R workspace when quitting.  So he added
    >> assignInNamespace lines to his .Rprofile file to replace base::q with
    >> one that, by default, called the original with save="no"..
    >> utils::assignInNamespace(".qOrig", base::q, "base")
    >> utils::assignInNamespace("q", function(save = "no", ...)
    >> base:::.qOrig(save = save, ...), "base")
    >> This worked fine until he decide to load the distr package:
    >> > suppressPackageStartupMessages(library(distr))
    >> Error: package or namespace load failed for ‘distr’ in
    >> loadNamespace(name):
    >> there is no package called ‘.GlobalEnv’
    >> distr calls setGeneric("q"), which indirectly causes the environment
    >> of base::q, .GlobalEnv, to be loaded as a namespace, causing the error.
    >> Giving his replacement q function the environment getNamespace("base")
    >> avoids the problem.
    >> I can reproduce the problem by making a package that just calls
    >> setGeneric("as.hexmode",...) and a NAMEPACE file with
    >> exportMethods("as.hexmode").  If my .Rprofile puts a version of as.hexmode
    >> with environment .GlobalEnv into the base namespace, then I get the same
    >> error when trying to load the package.
    >> I suppose this is mostly a curiosity and unlikely to happen to most people
    >> but it did confuse us for a while.
    >> Bill Dunlap
    >> TIBCO Software
    >> wdunlap tibco.com
    >> [[alternative HTML version deleted]]
    >> ______________________________________________
    >> 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

More information about the R-devel mailing list