微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R中是否有类似环境的打印方法?

如何解决R中是否有类似环境的打印方法?

我在 R 中创建了一个带有两个简单函数的简单环境,

AnEnv <- new.env()
AnEnv$mod <- function(a,b) a%%b
AnEnv$pwr <- function(a,b) a^b

每当我在 R 控制台中输入 AnEnv 时,它都会返回类似 <environment: 0x7f7f6fe3d4f0>内容。有没有可以改变这种行为的原因。例如,当我输入 AnEnv 时,它会返回来自 ls(env = AnEnv)ls.str(env = AnEnv) 的结果。

解决方法

R 已经有 ls(e),ls(e,all = TRUE),as.list(e) 和 str(as.list(e)) 将显示对象名称(以点开头的除外) ,所有对象名称,环境 e 的全部内容以及内容摘要,因此不清楚这有什么用;但是,我们可以为环境添加一个名称,然后它就会显示出来。

e <- new.env()
attr(e,"name") <- "my env"

e
## <environment: 0x000000001532f8b0>
## attr(,"name")
## [1] "my env"

或使用 environmentName:

environmentName(e)
## [1] "my env"

在某些情况下,环境已经具有名称和/或其他属性。

baseenv()
## <environment: base>

globalenv()
## <environment: R_GlobalEnv>

as.environment("package:graphics")
## <environment: package:graphics>
## attr(,"name")
## [1] "package:graphics"
## attr(,"path")
## [1] "C:/Program Files/R/R-4.1/library/graphics"
,

也许你想要这样的东西:

print.environment = function(x) {
  for (obj in ls(envir=x)) {
    cat(paste0(obj,": "))
    print(get(obj,envir=x))
  }
}
print (AnEnv)
# mod: function(a,b) a%%b
# pwr: function(a,b) a^b

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。