提问人:mshaffer 提问时间:9/17/2022 最后编辑:Dharmanmshaffer 更新时间:3/11/2023 访问量:162
如何从环境字符串中获取环境对象?
How to get the environment object from the environment string?
问:
假设我创建了一个函数:
x = function() { print(environmentName(environment())); envir=environment(); print(envir); print(environmentName(envir)); print(environmentName(environment())); print(environmentName(as.environment(environment()))); print(environmentName(parent.env(environment()))); envir; }
在我的计算机上,它仅在一个实例中打印出环境的唯一哈希值。这就引出了一个基本问题,即什么是函数以及函数实际上是如何工作的。envir
environmentName(envir)
例如
( env = x() );
输出:
> ( env = x() );
[1] ""
<environment: 0x000001fec97c3eb0>
[1] ""
[1] ""
[1] ""
[1] "R_GlobalEnv"
<environment: 0x000001fec97c3eb0>
并报告一个 “” EMPTY 环境名称:
> environmentName(env)
[1] ""
当我期待一根绳子或其他东西时。我想每次调用函数时,我都会得到一个新环境。"0x000001fec97c3eb0"
x
> environmentName(x)
[1] ""
> environmentName(environment(x))
[1] "R_GlobalEnv"
新环境
也许除非它被“固定”到包或附加为环境? 从(如何在 R 中获取变量的环境)
a <- new.env(parent=emptyenv())
a$x <- 3
attach(a)
b <- new.env(parent=emptyenv())
b$x <- 4
这将产生:
environmentName(a);
environmentName(b);
都是空的 “” ???
它似乎确实适用于以下内容,从 GLOBAL 调用:
> environmentName(environment());
[1] "R_GlobalEnv"
因此,似乎存在一个基本问题:
基础问题:究竟是如何工作的?environmentName
但这不是我的主要问题。上面的示例是一个函数,它有一个作为输入并返回一个字符串。我怎样才能扭转这个过程。也就是说,如果我有一个字符串名,我如何返回 R 对象?envir
R_GlobalEnv
envir
主要问题:有没有一个函数可以反转 ?environmentName
也就是说,如果我有一个 的 stringname ,我应该调用什么函数来反转它?或者可以编写什么函数来增强体验?environmentName
R
例如,
env.toName = function(envir=environment()) { environmentName(envir); }
env.fromName = function(envirstr) { XXVXX(envirstr); }
答:
并非所有环境都有名称,这就是您有时会看到的原因。 只返回 的属性。""
environmentName(env)
"name"
env
没有标准函数可以获取名称并返回环境:要编写一个,您必须在视图中搜索所有变量以查找环境,然后单独检查每个变量的名称。您可能会发现多个具有相同名称属性的,例如
a <- new.env()
attr(a, "name") <- "myenv"
b <- new.env()
attr(b, "name") <- "myenv"
environmentName(a)
#> [1] "myenv"
environmentName(b)
#> [1] "myenv"
创建于 2022-09-17 使用 reprex v2.0.2
环境中的名称只是作为装饰,而不是用于唯一标识。使用以下命令检查相等性:identical()
d <- a
environmentName(d)
#> [1] "myenv"
identical(a, b)
#> [1] FALSE
identical(a, d)
#> [1] TRUE
评论
name
TRUE
<environment: 0x000001fec97c3eb0>
0x000001fec97c3eb0
0x000001fec97c3eb0
上一个:测验打印错误猜测数的错误值
评论