[R] Functions within functions - environments

Rui Barradas ruipbarradas at sapo.pt
Wed Jun 12 19:55:08 CEST 2013


Hello,

See the help page for parent.frame, and use its argument to go back to 
the frames of variables 'a' and 'b':


innerfunction<-function()
{
     env1 <- parent.frame(1)  # for 'b'
     env2 <- parent.frame(2)  # for 'a'
     print(paste(env2$a, " from inner function"))
     print(paste(env1$b, " from inner function"))
     setwd(wd)
}


Now it complains about 'wd'.
(Are you sure you want to hard code the number of frames to go back to? 
It seems better to write "normal" functions, i.e., functions with 
arguments. innerfunction would have 2 args and middlefunction just one, 
'a'.)

Hope this helps,

Rui Barradas

Em 12-06-2013 18:42, Rik Verdonck escreveu:
> Dear list,
>
>
> I have a problem with nested functions and I don't manage to get it
> solved. I know I should be looking in environments, and I have tried a
> lot, but it keeps on erroring.
> An easy version of the problem is as follows:
>
>
>
> innerfunction<-function()
> {
>      print(paste(a, " from inner function"))
>      print(paste(b, " from inner function"))
>      setwd(wd)
> }
>
>
> middlefunction<-function()
> {
>      b="b"
>      print(paste(b, " from middle function"))
>      innerfunction()
> }
>
>
> outerfunction<-function()
> {
>      a="a"
>      print(paste(a," from outer function"))
>      middlefunction()
> }
>
> outerfunction()
>
>
>
> Here, R will tell me that the inner function has no clue what a or b is.
> So what I want, is the inner function to recognize a and b.
> Any suggestions?
>
> Many thanks!
> Rik
>
>
>
>



More information about the R-help mailing list