Dear R-community,


I have been experiencing this issue with functions within a function and
I can kind of feel where the problem is (environments, closures etc),
but I don't manage to solve it.

I will sketch it with an example:

#We have two simple "inner" functions:

############## INNER FUNCTION1 #################
innerfunction1<-function()
{
        ab<-a+b
        cd<-c+d
        innerfunctionlist<-list("ab"=ab,"cd"=cd)
}
################################################

############## INNER FUNCTION2 #################
innerfunction2<-function()
{
        print(AB+CD)
}
################################################

#And we have a main script with a number of predefined variables.
#This shapes an environment in which variables that will be used
#by the inner function are defined.
#############   MAIN SCRIPT     ################
        a=1
        b=2
        c=3
        d=4


        #source(filepath/to/innerfunction1)
        outcome1<-innerfunction1()

        AB      <-outcome1$ab
        CD      <-outcome1$cd

        #source(filepath/to/innerfunction2)
        innerfunction2()


#################################################



#So far so good. No problem if you run this.
#The problem emerges if you want to make the main script a function.
#So now I wrap it into a function:


        main<-function()
        {
                a=1
                b=2
                c=3
                d=4

                #source(filepath/to/innerfunction1)
                outcome1<-innerfunction1()

                AB <-outcome1$ab
                CD <-outcome1$cd

                #source(filepath/to/innerfunction2)
                innerfunction2()
        }



when I now run main() in an environment where all these variables are not defined, I will get this error
message:

Error in innerfunction1() : object 'a' not found

I can solve this by defining the variables a, b, c and d. However, I
will then get next error message:

Error in print(AB + CD) : object 'AB' not found


I think I see what happens. The right variables are not present
in the right environment. Probably I did something silly, but I really
don't see how to solve this. Can someone please help me?

Many thanks!
Rik Verdonck
University of Leuven

	[[alternative HTML version deleted]]

