由于使用以下代码出现错误,如何将容器名称转换为字符:
tenv = new.env()
evalq({ }, tenv)
y = function(myEnv) {
print(as.character(myEnv))
}
y(tenv)
Error in as.character(myEnv) :
cannot coerce type 'environment' to vector of type 'character'
由于使用以下代码出现错误,如何将容器名称转换为字符:
tenv = new.env()
evalq({ }, tenv)
y = function(myEnv) {
print(as.character(myEnv))
}
y(tenv)
Error in as.character(myEnv) :
cannot coerce type 'environment' to vector of type 'character'
如果您只想获取传递给myEnv
参数的对象的名称,那么一个常见的习惯用法是deparse(substitute( ))
. 函数可以写成:
y <- function(myEnv) {
deparse(substitute(myEnv))
}
在使用中给出
> tenv = new.env()
> evalq({ }, tenv)
> y(tenv)
[1] "tenv"
[注意我没有明确print
的结果deparse(substitute( ))
,我只是返回它并将打印留给 R 环境]
另一种方法是获取匹配的函数调用,match.call()
然后从生成的语言对象中提取您想要的位。例如:
yy <- function(myEnv) {
.call <- match.call()
.call[[2]]
}
在使用中给出
> yy(tenv)
tenv
> yy(myEnv = tenv)
tenv
您不能将“容器”(环境)转换为字符串,因为环境不具有这样的属性。如果您想要存储环境并作为参数传递给 function 的变量的名称,请y
使用上面@Gavin 提出的解决方案。
OTOH,如果要转储环境内容,请使用以下命令:
y = function(myEnv) {
print(as.list(myEnv))
}
顺便说一句,我必须指出,我不明白你为什么要跑步evalq({ }, tenv)
。它不会改变环境。尝试以下操作(运行命令后):
> uenv <- new.env()
> identical(as.list(uenv),as.list(tenv))