如果我采取e <- environment()
并致电print(e)
或e
,我就会
> e
<environment: R_GlobalEnv>
但是e
具有NULL属性,并且$
基于该环境的工作空间中隐藏和可查找的对象命名了元素(默认包含.N和.RandomSeed)。
print.environment
没有方法。 R如何知道打印<environment: R_GlobalEnv>
?
我希望能够制作一个符合以下条件的print.environment
方法:
print.environment <- function(env) {
paste('We are in', as.character(env))
}
并希望避免capture.output
。打印到存储在环境对象中的shell的实际名称在哪里?
答案 0 :(得分:2)
print.default
处理这个问题。
你可以尝试:
print.environment <- function(x, ...) cat("We are in", environmentName(x), "\n")
# test
e <- new.env()
attr(e, "name") <- "X"
print(e)
## We are in X
如果这还不够,那么在R级别(而不是C级别),我认为你需要使用capture.output
。这会打印出哈希值,如果有名称,也会输出名称。
print.environment <- function(x, ...) {
h <- gsub("^<environment: |>$", "", grep("<environment: ",
capture.output(print.default(x)), value = TRUE))
Name <- environmentName(x)
if (h == Name) h <- ""
Name <- if (Name != "") paste0("(", Name, ")")
cat("We are in", h, Name, "\n")
}
e <- new.env()
print(e)
## We are in 0x000000000d3e6fa8
attr(e, "name") <- "X"
print(e)
## We are in 0x000000000d3e6fa8 (X)
print(.GlobalEnv)
## We are in (R_GlobalEnv)
答案 1 :(得分:0)
可以使用environmentName
访问环境的名称,如下例所示:
> e <- environment()
> paste("You are in the enviroment: ",environmentName(e))
[1] "You are in the enviroment: R_GlobalEnv"