【R语言】环境空间

ops/2025/2/5 5:21:58/

一、环境空间的特点

环境空间是一种特殊类型的变量,它可以像其它变量一样被分配和操作,还可以以参数的形式传递给函数。

R语言中环境空间具有如下3个特点:

1、对象名称唯一性

此特点指的是在不同的环境空间中可以有同名的变量出现,但是在同一个环境空间内不允许有同名的变量出现,即使对同一个变量进行多次赋值操作,其每次赋值的内存地址也都不相同。

# 定义变量x并查看其内存地址
x <- "你好,关关。"
data.table::address(x)
# 对x重新赋值然后查看其内存地址
x <- c(22,33,44,55)
data.table::address(x)

 

2、变量赋值传递性

如果把当前环境空间变量赋值给一个新变量,修改原有环境空间变量的值,则新环境空间中的变量值也会跟着改变。

# 创建环境空间变量e1
e1 <- new.env()
# 将环境空间变量e1赋值给e2
e2 <- e1
# 给e1环境空间中的变量赋值
e1$x <- c(1,2,3)
# 查看e2中的变量x
e2$x
# 比较e1和e2是否相同
identical(e1, e2)
# 查看e1和e2的环境地址是否相同
data.table::address(e1)
data.table::address(e2)

 

3、结构层次性

 在R语言的环境变量中,空环境是最顶层的环境空间,其次是base包的环境空间,最后是自定义的环境空间。可以通过递归查找父环境空间来查看整个环境空间的层次结构。

# 删除当前环境空间里的所有对象
rm(list = ls())
# 创建新的环境空间对象e1
e1 <- new.env()
# 编写递归查找父空间的函数
parent.find <- function(e) {print(e)if (is.environment(e) & !identical(emptyenv(), e)) {parent.find(parent.env(e))}
}
# 递归查找环境空间e1的父空间
parent.find(e1)

 

 从以上结果可知:内部环境e1的父环境是全局环境,接着是base包环境,和通过Autoloads函数加载的6个基础包环境(stats,graphics,grDevices,utils,datasets,methods),最顶层的是空环境。

二、环境空间种类

R语言中有5种环境:

全局环境:也叫用户环境,指在当前用户下R程序运行的环境空间。

内部环境:通过“new.env()”命令创建的环境空间,也可以是匿名的环境空间。

父环境:当前环境空间所处的上一层环境。

空环境:也叫顶层环境,指没有父环境的环境空间。

包环境:指R包封装的环境空间。

1、全局环境

# 全局环境(当前环境)
environment()

2、内部环境

e <- new.env()
e

3、父环境

# 查看环境e的父环境
parent.env(e)

4、空环境

emptyenv()

5、包环境

baseenv()

三、环境空间的使用方法

 R语言的base包有一些基础的函数,可以用来使用环境空间。

environment:查看函数的环境空间定义;

environmentName:查看环境空间的名字;

env.profile:查看环境空间的属性值;

new.env:创建一个新的环境空间;

is.environment:判断一个对象是否属于环境空间;

ls:列出当前环境空间中的所有对象;

search:查看当前环境空间中加载的R包;

exists:查看指定环境空间中的对象是否存在;

get:取出指定环境空间中的对象;

assign:给环境空间中的变量赋值;

rm:删除环境空间中的对象。

1、环境空间的访问

 查看函数所在的环境空间

# 查看mean函数所在的环境空间
environment(mean)

 新建环境空间

# 新建环境空间
e <- new.env(hash=T, parent = parent.frame(), size=29L)

 判断是否是环境空间

# 判断是否是环境空间
is.environment(e)

 

 查看环境空间的属性

# 查看环境空间的属性
env.profile(e)

设置环境空间的名字及查看其名字 

# 设置环境空间的名字及查看其名字
attr(e, "name") <- "Ning"
environmentName(e)

 

 2、环境空间的对象操作

清除当期环境空间中定义的所有对象,并创建新对象

# 清除当前环境空间中定义的所有对象,并创建新对象
rm(list = ls())
e1 <- new.env(hash=T, parent = parent.frame(), size = 29L)
e1

 给环境空间添加变量

# 给环境空间添加变量
e1$x <- c(2,3,5,7)
e1$y <- function(){"你好,关关。"
}
assign(x = "a", value = "你好,关关。", envir = e1)

查看当前环境空间和e1空间中的变量 

ls(e1)

 

查看环境空间中某个变量是否存在

# 查看e1环境变量中x变量是否存在
exists("x", envir=e1)

 

取出环境空间中的变量值

get("x", envir=e1)

给环境空间中的变量重新赋值

assign(x = "x", value = c(1,2,3,4,6,7), envir = e1)
get("x", envir=e1)

删除环境空间中的变量

rm(x, envir=e1)
ls(e1)


http://www.ppmy.cn/ops/155781.html

相关文章

鲸鱼算法 matlab pso

算法原理 鲸鱼优化算法的核心思想是通过模拟座头鲸的捕食过程来进行搜索和优化。座头鲸在捕猎时会围绕猎物游动并产生气泡网&#xff0c;迫使猎物聚集。这一行为被用来设计搜索策略&#xff0c;使算法能够有效地找到全局最优解。 算法步骤 ‌初始化‌&#xff1a;随机生成一…

全面掌握市场信息:xtquant库在证券品种数据获取中的应用

全面掌握市场信息&#xff1a;xtquant库在证券品种数据获取中的应用 开篇点题&#xff1a;技术背景和应用场景 在量化交易领域&#xff0c;快速准确地获取市场基础信息是至关重要的。xtquant库提供了一种便捷的途径来获取各类证券品种的数据&#xff0c;包括股票、指数、基金等…

2025年02月02日Github流行趋势

项目名称&#xff1a;oumi 项目地址url&#xff1a;https://github.com/oumi-ai/oumi 项目语言&#xff1a;Python 历史star数&#xff1a;1416 今日star数&#xff1a;205 项目维护者&#xff1a;xrdaukar, oelachqar, taenin, wizeng23, kaisopos 项目简介&#xff1a;构建最…

八. Spring Boot2 整合连接 Redis(超详细剖析)

八. Spring Boot2 整合连接 Redis(超详细剖析) 文章目录 八. Spring Boot2 整合连接 Redis(超详细剖析)2. 注意事项和细节3. 最后&#xff1a; 在 springboot 中 , 整合 redis 可以通过 RedisTemplate 完成对 redis 的操作, 包括设置数据/获取数据 比如添加和读取数据 具体整…

vercel部署流程

1、清除缓存 npm cache clean --force 2、安装指定版本vercel&#xff08;例如31.0.0&#xff09; npm install vercel31.0.0 3、选择一种方式登录vercel npx vercel login 4、运行vercel&#xff0c;根据提示完成部署 npx vercel

笔试-业务逻辑5

应用 一公司组建团建活动&#xff0c;租用双人公共自行车&#xff0c;每辆最多乘坐2人&#xff0c;且最大载重为m。 该公司共n个人&#xff0c;请问需要多少双人公共自行车&#xff1f; 实现 m, n [int(i) for i in input("请输入双人公共自行车限重以及人数&#xff…

C++【iostream】数据库的部分函数功能介绍

在 C 编程世界中&#xff0c;iostream 库扮演着举足轻重的角色&#xff0c;它是 C 标准库的核心组成部分&#xff0c;为程序提供了强大的输入输出功能。无论是简单的控制台交互&#xff0c;还是复杂的文件操作&#xff0c;iostream 库都能提供便捷高效的解决方案。本文将深入剖…

leetcode931_下降路径最小和

1. 题意 一个N x N的方形数组&#xff0c;从第一行任意列出发&#xff0c;每次向下一行&#xff0c;可以向左向右保护列不动&#xff0c;求到最后一行的最小路径和。 2. 题解 简单动态规划问题 d p [ i ] [ j ] m [ i ] [ j ] min ⁡ { d p [ i − 1 ] [ j − 1 ] d p [ …