I do not belive this would work in my case, since as I said, the function is called by several different functions.
Ales Ziberna -----Original Message----- From: Duncan Murdoch [mailto:[EMAIL PROTECTED] Sent: Wednesday, January 04, 2006 5:05 PM To: Ales Ziberna Cc: 'R-help' Subject: Re: [R] Putting an object in to a function that calls the current function On 1/4/2006 10:32 AM, Ales Ziberna wrote: > Thank you both (Duncan Murdoch and Gabor Grotehendieck) for your answers. > Both work and my problem is solved. > > I do aggree with Duncan Murdoch that usually messing with the > environment of your caller is a bad idea. The reason why I still want > to do it in this case is that I exactly know which functions are > calling (the function is NEVER called directly) it and it was in this > case easier to use this than to modify each of the fuctions that are calling it. Using R's lexical scope may lead to a cleaner solution. That is, you define the functions within the one that calls them; then a <<- "ok" would do what you want (provided "a" existed in the enclosure at the time). For example, f <- function() { a <- "init" s <- function() { a <<- "ok" } s() print(a) } Duncan Murdoch > > Thanks again! > Ales Ziberna > > -----Original Message----- > From: Duncan Murdoch [mailto:[EMAIL PROTECTED] > Sent: Wednesday, January 04, 2006 3:26 PM > To: Ales Ziberna > Cc: R-help > Subject: Re: [R] Putting an object in to a function that calls the > current function > > On 1/4/2006 9:14 AM, Ales Ziberna wrote: >> Hello! >> >> I would like to put an object in to a function that calls the current >> function. >> >> I thought the answer will be clear to me after reading the help files: >> ?assign >> ?sys.parent >> >> However it is not. >> Here is an example I thought should work, however it dose not exactly: >> >> f<-function(){s();print(a)} >> s<-function()assign(x="a",value="ok",pos=sys.parent()) >> f() #I want to get "ok" >> a #I do not want "a" in global enviorment, so here I should get >> #Error: Object "a" not found >> ff<-function()f() #here I also want to get "ok" - it should not >> matter if the parent fuction has any parents >> >> Thank you in advance for suggestions! > > That's not a good idea. Why would you want to do something like that? > > That out of the way, here's a function that does it: > > f<-function(){s();print(a)} > s<-function()assign(x="a",value="ok",env=parent.frame()) > > The difference between pos=sys.parent() and env=parent.frame() is that > the pos is interpreted as a position in the search list (see ?assign), > while > parent.frame() gives you the environment from the stack, equivalent to > sys.frame(sys.parent()). > > In R you're almost certainly better off working directly with > environments, rather than going through integer indexing the way you > (used to?) have to do in S-PLUS. > > Did I mention that messing with the environment of your caller is a > bad idea? It's not yours, don't touch it. > > 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
