对R的介绍
在R会话期间,
按名称创建和存储对象(我们将在下一节讨论此过程)。R命令objects()
(或者,ls())可用于显示(大多数)当前存储在R中的对象的名称。当前存储的对象集合称为workspace.
R语言的定义是
2.1.10环境
环境可以被认为是由两件事组成的。一种框架,由一组符号值对和一个外壳组成,是一个指向封闭环境的指针。当R查找符号的值时,对帧进行检查,如果找到匹配的符号,则返回其值。如果没有,则访问该封闭环境并重复该进程。环境形成树结构,在树结构中,外壳扮演父级角色。
3.5.1全球环境
全局环境是(用户工作区)的根。命令行中的赋值操作将导致相关对象属于全局环境。它的封闭环境是搜索路径上的下一个环境,等等,返回到空环境,即基础环境的封闭环境。
工作区和环境之间有什么区别?
工作区是当前环境,还是当前环境树,还是其他东西?
谢谢。
发布于 2020-04-01 01:55:19
环境的目的是将一组名称绑定到一组值(Advanced,第124页)。R中的环境存在于一组父/子关系中,从没有父环境empty environment开始。它的子程序是base environment,是基本R包的环境。
当您通过library()将包加载到R会话时,这些包的环境将插入到base environment和global 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"
> 当我加载另一个包时,它会插入到.GlobalEnv和tools: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中,Hadley将搜索路径说明如下。

搜索路径很重要,因为如果两个或多个包的对象具有相同的名称,则R会使用搜索路径中找到的第一个匹配来解析引用。
当新加载的包包括在先前加载的包中隐藏对象的对象时,r生成警告。例如,当我们在library(caret)中运行RStudio时,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,Wickham,Hadley,CRC出版社,2015年。
https://stackoverflow.com/questions/60962116
复制相似问题