在R中打印环境变量的默认方法是什么?

时间:2018-04-04 18:09:14

标签: r scoping

如果我采取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的实际名称在哪里?

2 个答案:

答案 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"