R的环境系统
学习R如何存储、查找和操作像deck这样的对象
R其实是借助了它的环境系统来实现所有这些任务的
一、环境
计算机会将文件夹和子文件夹用分层结构组织起来。要想找到某个文件,你需要知道如何在计算机的文件系统中逐层查找。
R存储对象时也用了类似的层级系统结构。每一个对象都存储在一个环境(environment当中。环境是一个类似于列表的对象,概念上接近于计算机上的文件夹。每一个环境都与一个父环境相连接,后者是高一层级的环境。这样的父子环境就构成了一个分层的环境系统。
可以通过devtools包中的parenvs函数查看R的环境系统。parenvs(all=true)会返回当前会话包含的环境列表。
R存储对象的树形环境结构类似于计算机的文件系统结构。
二、操作R环境
环境树中有三个环境拥有自己的调用函数。它们是:全局环境(r_GlobalEnv)、基环境(base)和空环境(r_EmptyEnv)。可以通过以下命令调用它们。
globalenv()
baseenv()
emptyenv()
可以用parent.env函数查看某一个环境的父环境。
parent.env(globalenv())
空环境是R中唯一没有父环境的环境。
可以使用ls命令或者lsstr命令查看存储在环境中的对象。ls命令只返回对象名称;ls.str命令则会大致展示每个对象的结构。
ls(emptyenv())
ls(globalenv())
可以使用assign函数将对象存储到某个特定环境当中。
assign(“new”,“Hello Global”,envir=globalenv())
globalenv()$new
任何时候,R的活动环境都只有一个,活动环境就是全局环境。
三、作用域规则
在搜索对象时,R会遵循一系列的规则。这些规则被称作R的作用域规则(scopingrules。
(1)R首先在当前的活动环境中搜索对象。
(2)在命令行中工作时,活动环境就是全局环境。因此,命令行中的所有调用都发生在全局环境。
当所要搜索的对象不在当前的活动环境中时R会按照以下规则进行搜索。
(3)当R在某个环境中没有搜索到对象时,R会进入该环境的父环境,然后进入该父环境