【问题标题】:What is the difference between the workspace and the environments?工作空间和环境之间有什么区别?
【发布时间】:2020-04-01 00:58:02
【问题描述】:

R 简介

在 R 会话期间,对象按名称创建和存储(我们 在下一节讨论这个过程)。 R 命令

> objects()

(或者,ls()) 可用于显示(大部分)的名称 当前存储在 R 中的对象。 当前存储的对象称为工作区

R 语言定义

2.1.10 环境

环境可以被认为是由两件事组成。一个框架, 由一组符号值对和一个外壳、一个指针组成 到一个封闭的环境。当 R 查找符号的值时 检查框架,如果找到匹配的符号,它的值将 被退回。如果不是,则访问封闭环境并 该过程重复。 环境形成一个树形结构,其中的围栏扮演着父母的角色。

3.5.1 全球环境

全局环境用户工作区的根。来自命令行的赋值操作将导致相关的 对象属于全局环境。它的外壳 environment 是搜索路径上的下一个环境,依此类推 到作为基地外壳的空旷环境 环境。

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

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

谢谢。

【问题讨论】:

  • 那么“全局环境是用户工作空间的根”是什么意思呢?
  • root 这里只是表示您开始 R 会话的位置。有些人在他们的桌面上开始每个会话,有点像。我通常有一些我正在处理的特定内容和一个正在处理的目录(带有 subs),所以我在那里开始我的会话,这就是我的“用户空间的根目录”。全局,(有点回到那个范围的事情)意味着如果你写一个函数,或者已经读入一个文件到一个对象,它可以在 > 提示符下按名称使用。

标签: r


【解决方案1】:

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

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

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

可以使用search() 函数查看环境列表。例如,当我启动 RStudio 时,启动时加载的所有包都列在环境链中,以 base 包开头:

> # 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 之间的环境链中。

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 R中,Hadley Wickham 说明了搜索路径如下。

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

当新加载的包包含一个对象,该对象掩盖了先前加载的包中的对象时,R 会生成警告。例如,当我们在 RStudio 中运行 library(caret) 时,R 会生成以下消息。

> 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 R,Wickham, Hadley,CRC Press 2015。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2019-09-13
    • 1970-01-01
    相关资源
    最近更新 更多