[ESS] ESS R code evaluation in package
Vitalie Spinu
@pinuvit @ending from gm@il@com
Thu Nov 8 23:32:26 CET 2018
>> On Tue, Nov 06 2018 16:53, Cyrus Harmon via ESS-help wrote:
> 1. How might I compile 'moose <- function () { “bar” }’ from Emacs/ESS and
> have moose show up in my package?
> 2. If it isn’t going into my package now, where is it going?
There are essentially 3 cases:
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.
2. `moose` is not exported. This means it is in your namespace but not in the
package environment. And ls("package:foo") wont show it .
In this case when you eval `moose` it replaces the old version of `moose` in
the namespace. You can see it with ls(asNamespace("foo"))
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.
> 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.
Alternatively you can use devtools integration. See C-c C-w map for what is
available. Particularly load-package with [C-c C-w l] or run complete re-install
and reload with (C-c C-w i). Depending on your version of ESS you might need the
dev version of devtools and friends to take the full advantage of the system.
Vitalie
More information about the ESS-help
mailing list