在R语言的文献中,函数被证实地称为“闭包(closure)”。函数不仅包括参数和函数体,也包括它的“环境(environment)”。环境是由创建函数时出现的对象集构成。
►顶层环境
> w <- 12> f <- function( y ){
+ d <- 8
+ h <- function(){
+ return ( d*(w+y) )
+ }
+ return ( h() )
+ }
> environment( f )
<environment: R_GlobalEnv>
此例中,函数f()是在顶层(解释器命令提示符下)构建的,于是它处于顶层环境。顶层环境在R的输出结果里表示为R_GlobalEnv,不过,它常与R代码的.GlobalEnv混淆。如果以批处理方式运行R程序,也会被认为在顶层。
函数ls()会把某个环境中的所有对象列举出来。如果,在顶层调用它,就会得到顶层的环境下的对象名单。用ls.str()可以获得更多的信息。
在函数中调用不带参数的ls()会返回当前的局部变量(包括参数)。使用envir参数,ls会输出函数调用链中任何一个框架的局部变量名。
►变量作用域的层次
在R语言中,因为函数属于对象,在函数中定义一个函数是可以实现的,有时从面向对象编程封装的目的来看,这样做