当函数被调用时, 一个新的求值框架会被创建。在程序执行的任何时刻, 通过调用堆栈(call stack)可以访问当前激活环境。 每当一个函数被调用时,一个被称为上下文(context)的 特殊结构会在内部创建并存放在一个上下文的列表里面。 当一个函数完成求值,它的上下文会从调用堆栈里面去除。
变量定义高于可以得到的调用堆栈时称为动态作用域。 一个变量的绑定由变量的最近定义决定。 这和R里面默认的作用域规则相违背。R里面默认的规则是 变量绑定在函数定义的环境中(词法作用域)。 一些函数,特别是使用和操作模型公式的函数,需要 通过直接访问调用堆栈来模拟动态作用域。
通过 函数名以 sys. 开头的一族函数来访问调用堆栈。 现将它们简单列举如下。
sys.callsys.framesys.nframesys.functionsys.parentsys.callssys.framessys.parentssys.on.exitsys.statussys.frames,sys.parents 和 sys.calls。
parent.frame