[ESS] ESS R code evaluation in package

Cyrus Harmon cyru@ @ending from bobobe@ch@com
Fri Nov 9 00:15:25 CET 2018


Dear Vitalie,

On 11/8/18 2:32 PM, Vitalie Spinu via ESS-help wrote:
> There are essentially 3 cases: 
Thank you very much for the helpful reply!
>    1. `moose` is public (exported) function in your package. This means it is
>    present in both namespace and package environments when the package is loaded.
>
>    In this case, when you eval moose <- function() ... it goes into both package
>    environment and namespace environment of the package.

It appears there are two variants to this case. One case is as you 
describe where I'm working on a package that I load with 
devtools::load_all. Another is the case of a package that is installed 
with devtools::install and then I have some other code I'm working on 
that is calling routines in the installed package. I naively assumed 
that i could just C-c C-r the source for an installed function and I 
would get the new version, at least for the current R session. That 
doesn't seem to be the case. Perhaps it's the object sealing you mention 
below.

My workaround is to just not INSTALL (or devtools::install) my packages 
(note one of my occasional R peeves - using capitalization for 
disambiguation not for emphasis) and to load_all them. This seems to be 
working for the moment and has greatly reduced my frustration level!

>    3. Final case which (seems to be of main interest to you) when `moose` is a
>    new function. Then, due to the fact that R namepsaces are sealed for new
>    objects ESS has to do some cheating. It basically inserts a new environment
>    between package namespace env and its parent and adds all new objects to that
>    environment. You should get NEW[moose] message in the minibuffer.
>
>    With this arrangement all your code will work as if that function exists in
>    the actual package environment, but you won't be able to see that object with
>    ls.
Is that new environment from the REPL? My workaround here is to type 
code directly into the file that has the, e.g., new function/variable 
definition, eval what I need with C-c C-r, e.g., and then delete the 
code. Not the most convenient, but not horrible.
>> 3. If I can’t do this is there some easy way to build an reinstall an existing R
>> library without having to call me R process and restart every time I want to
>> make a simple change to a library function (this is where I find myself now).
> Namespaced evaluation should work for R code as described above. If not, it's a
> bug.

Ok, it's very helpful to know what the intended/expected behavior us 
before I go running off thinking something might be a bug.

thanks again!

Cyrus



More information about the ESS-help mailing list