3. 环境空间的访问R语言中有一些辅助函数,可以帮助我们理解和使用环境空间。
- new.env 创建一个环境空间
- is.environment 判断是否是环境空间类型。
- environment 查看函数的环境空间定义。
- environmentName 查看环境空间名字。
- env.profile 查看环境空间属性值。
- ls 查看环境空间中的对象。
- get 取出指定环境空间中的对象。
- rm 删除环境空间中的对象。
- assign 给环境空间中的变量赋值。
- exists 查看指定环境空间中的对象是否存在。
接下来,我们进行环境空间的访问操作。
# 新建一个环境空间> e1<-new.env()# 判断e1是否是环境空间类型> is.environment(e1)[1] TRUE# 查看当前环境空间> environment()<environment: R_GlobalEnv># 查看函数的环境空间> environment(ls)<environment: namespace:base># 查看环境空间的名字> environmentName(baseenv())[1] "base"> environmentName(environment())[1] "R_GlobalEnv"# 查看e1环境空间的名字> environmentName(e1)[1] ""# 设置e1的名字> attr(e1,"name")<-"e1"> environmentName(e1)[1] "e1"# 查看e1环境空间的属性值> env.profile(e1)$size[1] 29$nchains[1] 1$counts [1] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0环境空间中的对象操作。
# 清空当前环境空间定义的所的对象> rm(list=ls())# 定义环境空间有,和3个变量x> e1<-new.env()> x<-1:5;y<-2:10> e1$x<-10# 查看当前环境中的变量> ls()[1] "e1" "x" "y"# 查看e1环境空间中的变量> ls(e1)[1] "x"# 取当前环境空间的x值> get("x")[1] 1 2 3 4 5# 取e1环境空间的x值> get("x",envir=e1)[1] 10# 在e1环境空间中去y值,这个y值是从当前环境空间中继承的> get("y",envir=e1)[1] 2 3 4 5 6 7 8 9 10# 禁止环境空间的继承,在e1环境空间中去y值,出错> get("y",envir=e1,inherits=FALSE)Error in get("y", envir = e1, inherits = FALSE) : object 'y' not found# 给x重新赋值> assign('x',77);x[1] 77# 给e1环境空间的x重新赋值> assign('x',99,envir=e1);e1$x[1] 99# 在没有继承的情况下,给e1空间增加y变量> assign('y',99,envir=e1,inherits=FALSE);> y[1] 2 3 4 5 6 7 8 9 10> e1$y[1] 99# 删除e1环境空间的变量x,和当前环境空间的y> rm(x,envir=e1)> e1$xNULL> x[1] 77# 查看当前环境空间,和e1环境空间> ls()[1] "e1" "x"> ls(e1)[1] "y"# 查看x对象在当前环境空间是否存在> exists('x')[1] TRUE# 查看x对象在e1环境空间是否存在> exists('x',envir=e1)[1] TRUE# 查看x对象,在没有继承的情况下,在e1环境空间是否存在> exists('x',envir=e1,inherits=FALSE)[1] FALSE另外,pryr包的where函数可以直接定位对象的环境空间。
# 查看mean函数定义的环境空间> where(mean)Error: is.character(name) is not TRUE> where("mean")<environment: base># 查看where函数定义的环境空间> where("where")<environment: package:pryr>attr(,"name")[1] "package:pryr"attr(,"path")[1] "/home/conan/R/x86_64-pc-linux-gnu-library/3.0/pryr"# 查看x变量定义的环境空间> where("x")<environment: R_GlobalEnv># 查看y变量定义的环境空间,由于y变量定义在e1中,e1是当前空间的子空间,所以访问不到y变量> where("y")Error: Can't find y> e1$y[1] 99# 在e1空间查看y变量> where("y",e1)<environment: 0x2545db0> |