get: problem with environments
On Wed, Oct 10, 2012 at 10:04 PM, Thomas Lumley <tlumley at uw.edu> wrote:
On Thu, Oct 11, 2012 at 9:05 AM, R. Michael Weylandt <michael.weylandt at gmail.com> wrote:
Can someone more capable than I help Martin out with this? I'm feeling out of my league (that or I've missed something obvious) Shot in the dark: you aren't running this in some sort of debug mode, are you? RMW On Sun, Oct 7, 2012 at 5:10 PM, Martin Ivanov <tramni at abv.bg> wrote:
Thank You very much for Your replies.
Dear Michael,
"Does this persist after a new session (perhaps running as R --vanilla) and/or reinstall?"
Yes, it does. After running R --vanilla, still there are 4 contexts more on the call stack.
"You didn't show us how you tried to use parent.frame()"
I did it like this:
testfun1 <- function (x1) {
a1 <- 1;
sapply(X="a1", FUN=get, envir=parent.frame(x1));
}
testfun1(x1=1);
The above code never succeeds no matter what a number I give to x1.
This one is straightforward.
The smallest value you can give to parent.frame() is 1, which in this
case is the frame from which testfun1 is called. Compare these two
testfun1 <- function (x1) {
a1 <- 1
sapply(X="a1", FUN=get, envir=parent.frame(x1)))
}
testfun1(x1=1);
testfun2 <- function (x1) {
a1 <- 1
sapply(X="a1", FUN=function(x) get(x, envir=parent.frame(x1)))
}
testfun2(x1=1);
testfun1() never finds a1==1, but testfun2(3) does.
Remember, actual arguments to sapply() will be evaluated in the frame
sapply() is called from. It's only default arguments that are
evaluated inside the function.
Thanks Prof Lumley, I'm still not sure how this gets to the call stack of 5 or 6 the OP reported or the difference between GUI & Terminal. Any thoughts there? Michael