Next: , Previous: SEXPs, Up: R Internal Structures



1.2 环境和变量搜索

用户看到的`变量'(variables)是和`环境'中的对象绑定的符号。 术语`环境'(environment)在R里面用的比较模糊,它要么 表示单一的ENVSXP (一种符号-值对的成对列表)的架构, 要么表示ENVSXP和一个闭包的架构。

`变量'还可以在附加的地方搜索。这种地方通常出现在代码的 注释部分,叫着`用户数据库'(user databases)。 在R的原始代码里面好像没有记录,但在 RObjectTable包(http://www.omegahat.org/RObjectTables/) 里面有所提及。

基础环境是特定的。有一种空的含有闭包的ENVSXP环境 R_EmptyEnv, 但这种环境架构很少使用。 不过,它的捆绑对象是全家符号表的一部分,而且这些对象是全家符号表中 不是R_UnboundValue的符号。当 R 启动后,内置函数会在符号表中 安装(通过C代码)。同时安装的还包括含有值得原始函数(primitive functions) 和通过宏INTERNAL访问字段值的.Internal函数。 然后,确定.Platform.Machine,在基本环境中导入基础包和 进行系统检测。

环境架构(包括符号表)通常都会建立哈希函数, 以便于快速查找(包括插入和删除)。

默认状态下,R含有一个可见`变量'(符号和它们的绑定物)的全局缓存(哈希过的)。 is symbols and their bindings) which have been found, and this refers 它仅仅指向标明参加当前活动的环境,该环境包括全局环境(即用户工作空间), 基础环境和被attach的环境1。 当一个环境无论attachdetach, 它的符号的名字都会从缓存中去掉。 只有全局环境中搜索变量(可能作为递归搜索的一部分) 的时候,缓存才会被使用。


Footnotes

[1] 注意,被绑定(attach)的列表或保留的 数据映像(image)实际上创建一个环境然后附上这些列表和数据映像