首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工作区和环境之间有什么区别?

工作区和环境之间有什么区别?
EN

Stack Overflow用户
提问于 2020-04-01 00:58:02
回答 1查看 641关注 0票数 0

对R的介绍

在R会话期间,

按名称创建和存储对象(我们将在下一节讨论此过程)。R命令objects()

(或者,ls())可用于显示(大多数)当前存储在R中的对象的名称。当前存储的对象集合称为workspace.

R语言的定义是

2.1.10环境

环境可以被认为是由两件事组成的。一种框架,由一组符号值对和一个外壳组成,是一个指向封闭环境的指针。当R查找符号的值时,对帧进行检查,如果找到匹配的符号,则返回其值。如果没有,则访问该封闭环境并重复该进程。环境形成树结构,在树结构中,外壳扮演父级角色。

3.5.1全球环境

全局环境是(用户工作区)的根。命令行中的赋值操作将导致相关对象属于全局环境。它的封闭环境是搜索路径上的下一个环境,等等,返回到空环境,即基础环境的封闭环境。

工作区和环境之间有什么区别?

工作区是当前环境,还是当前环境树,还是其他东西?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-01 01:55:19

环境的目的是将一组名称绑定到一组值(Advanced,第124页)。R中的环境存在于一组父/子关系中,从没有父环境empty environment开始。它的子程序是base environment,是基本R包的环境。

当您通过library()将包加载到R会话时,这些包的环境将插入到base environmentglobal environment之间。

global environment是存储R会话中的用户定义对象的环境。这个环境是workspace的同义词,代表R用户通常工作的区域。

您可以看到带有search()函数的环境列表。例如,启动RStudio时,启动时加载的所有包都列在环境链中,首先是base包:

代码语言:javascript
复制
> # after starting R, what environments exist?
> search()
 [1] ".GlobalEnv"        "tools:rstudio"     "package:stats"     "package:graphics" 
 [5] "package:grDevices" "package:utils"     "package:datasets"  "package:methods"  
 [9] "Autoloads"         "package:base"     
> 

当我加载另一个包时,它会插入到.GlobalEnvtools:studio之间的环境链中。

代码语言:javascript
复制
library(randomForest)
randomForest 4.6-14
Type rfNews() to see new features/changes/bug fixes.
> search()
 [1] ".GlobalEnv"           "package:randomForest" "tools:rstudio"       
 [4] "package:stats"        "package:graphics"     "package:grDevices"   
 [7] "package:utils"        "package:datasets"     "package:methods"     
[10] "Autoloads"            "package:base"        
> 

当R解释一个对象引用时,它首先查找当前环境(可能是全局环境中的一个封闭环境),然后导航父链,直到它在原始引用中找到一个具有名称的对象,或者到达空环境。在Advanced中,Hadley将搜索路径说明如下。

搜索路径很重要,因为如果两个或多个包的对象具有相同的名称,则R会使用搜索路径中找到的第一个匹配来解析引用。

当新加载的包包括在先前加载的包中隐藏对象的对象时,r生成警告。例如,当我们在library(caret)中运行RStudio时,R会生成以下消息。

代码语言:javascript
复制
> library(caret)
Loading required package: lattice
Loading required package: ggplot2

Attaching package: ‘ggplot2’

The following object is masked from ‘package:randomForest’:

    margin

> 

此时,对margin()函数的引用将使用ggplot2中的引用,而不是randomForest中的引用。但是,我们可以使用::操作符显式引用对象的包名,比如randomForest::margin()

参考资料: Advanced,Wickham,Hadley,CRC出版社,2015年。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60962116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档