On 12-02-15 11:58 PM, Ben quant wrote:
Thank you Duncan. Interesting. I find it strange that you can't get a list
of the environments. But I'll deal with it...
I'd advise thinking really carefully about this, because I think it
indicates you've got a mental model of R internals that isn't a good
match to what's really going on. The kinds of things you might think about:
Would you find it just as strange that you can't easily get a list of
all character vectors? Environments aren't really more special than
other objects.
If you think it's strange that you can't get a list of all character
vectors, then consider that many of them aren't bound to names, so
they'll have a C-level pointer to identify them, but they'll be hard to
get to from within R.
The memory manager has a list of all objects and it goes through this
list during garbage collection, but that's not something that user-level
code should be able to do (except possibly debugging code).
Anyway, I'm about to start a new R dev project for my company. I'm thinking
about architecture, organization, and gotchas. I went through much of the
documentation you sent me. Thanks!. I came up with what I think is the best
way to implement environments (which I am using like I would use a class in
a traditional OO language) that can be reused in various programs.
I'm thinking of creating different scripts like this:
#this is saved as script name EnvTest.R
myEnvir = new.env()
var1 = 2 + 2
assign("myx",var1,envir=myEnvir)
Then I will write programs like this that will use the environments and the
objects/functions they contain:
source("EnvTest.r")
prgmVar1 = get("myVar1",pos=myEnvir)
## do stuff with env objects
print(prgmVar1)
Do you think this is the best way to use environments to avoid naming
conflicts, take advantage of separation of data, organize scripting
logically, etc. (the benefits of traditional OO classes)? Eventually, I'll
use this on a Linux machine in the cloud using.:
https://github.com/armstrtw/rzmq
https://github.com/armstrtw/AWS.tools
https://github.com/armstrtw/deathstar
http://code.google.com/p/segue/
...do you (or anyone else) see any gotchas here? Any suggestions, help,
things to watch for are welcome...
I would recommend that you avoid inventing another object system. R
currently has too many of those, and it means that lots of good code is
unreadable by people who use a different one than you chose.
Gabor gave a list of existing systems based on environments; besides
those you should consider the S4 system without reference classes (from
the methods package).
I don't know any of them well enough to tell you how to choose, but I
think if you put together prototypes of your project you'll run into
problems with any of them, and a big part of your choice should be to
see how easy it is to resolve those problems: Do you get good help from
the documentation? Do you get good help on the mailing lists or
Stackoverflow?
Duncan Murdoch
Note: I am aware of the (surprising?) scoping rules.
Thanks so much for your help.
Ben
On Tue, Feb 14, 2012 at 5:04 AM, Duncan Murdoch<[email protected]>wrote:
On 12-02-14 12:34 AM, Ben quant wrote:
Hello,
I can get at environments if I know their names, but what if want to look
at what environments currently exist at some point in a script? In other
words, if I don't know what environments exist and I don't know their
sequence/hierarchy, how do I display a visual representation of the
environments and how they relate to one another?
Environments are objects and most of them are maintained in the same
places as other objects (including some obscure places, such as in
structures maintained only in external package code), so it's not easy to
generate a complete list.
I'm looking at getting away from the package R.oo and using R in normal
state, but I need a way to "check in on" the status and organization of my
environments.
I've done considerable research on R's environments, but its a challenging
thing to google and come up with meaningful results.
I would suggest reading the technical documentation: the R Language
manual, the R Internals manual, and some of the papers on the "Technical
papers" page.
Duncan Murdoch
______________________________________________
[email protected] mailing list
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.