Board logo

标题: 揭开R语言中环境空间的神秘面纱(4) [打印本页]

作者: look_w    时间: 2019-2-20 19:13     标题: 揭开R语言中环境空间的神秘面纱(4)

3. 环境空间的访问R语言中有一些辅助函数,可以帮助我们理解和使用环境空间。
接下来,我们进行环境空间的访问操作。
# 新建一个环境空间> 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>




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0