List of all environments and namespaces

Viewed 31

I am looking for a way to create a graph of all the environments and namespaces available in current R session.

I managed to get a list, but it gets only as deep as Empty environment and I am looking for a way to list also the namespaces and unnamed environments, which as far as I know are outside the main search path. I am looking to get a list like this:

environment: R_GlobalEnv>

[[2]]
<environment: package:igraph>
attr(,"name")
[1] "package:igraph"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/igraph"

[[3]]
<environment: package:envnames>
attr(,"name")
[1] "package:envnames"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/envnames"

[[4]]
<environment: 0x135d63078>
attr(,"name")
[1] "ESSR"

[[5]]
<environment: package:stats>
attr(,"name")
[1] "package:stats"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/stats"

[[6]]
<environment: package:graphics>
attr(,"name")
[1] "package:graphics"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/graphics"

[[7]]
<environment: package:grDevices>
attr(,"name")
[1] "package:grDevices"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/grDevices"

[[8]]
<environment: package:utils>
attr(,"name")
[1] "package:utils"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/utils"

[[9]]
<environment: package:datasets>
attr(,"name")
[1] "package:datasets"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/datasets"

[[10]]
<environment: package:methods>
attr(,"name")
[1] "package:methods"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/methods"

[[11]]
<environment: 0x1468e5798>
attr(,"name")
[1] "Autoloads"

[[12]]
<environment: base>

[[13]]
<environment: R_EmptyEnv>

[[14]]
<environment: namespace:igraph>

[[15]]
<environment: namespace:magrittr>

[[16]]
<environment: 0x115bc5ef8>

[[17]]
<environment: namespace:envnames>

[[18]]
<environment: 0x1362fbef8>

[[19]]
<environment: namespace:stats>

[[20]]
<environment: namespace:graphics>

[[21]]
<environment: namespace:base>

[[22]]
<environment: namespace:grDevices>

[[23]]
<environment: 0x117615160>

[[24]]
<environment: namespace:utils>


[[50]]
<environment: 0x115d5edf8>
attr(,"name")
[1] "imports:magrittr"

[[51]]
<environment: 0x115adde90>
attr(,"name")
[1] "imports:envnames"

[[52]]
<environment: 0x146132188>
attr(,"name")
[1] "imports:utils"

[[53]]
<environment: 0x145afdfc0>
attr(,"name")
[1] "imports:stats"

[[54]]
<environment: 0x1361f0550>
attr(,"name")
[1] "imports:graphics"

[[55]]
<environment: 0x115828e60>
attr(,"name")
[1] "imports:grDevices"

[[56]]
<environment: 0x145b28cd8>
attr(,"name")
[1] "imports:methods"

[[57]]
<environment: 0x136199540>

The function I created, which returned me only the environments up to the EmptyEnv looks like this:

  listAllEnvs <- function(env = globalenv()) {
  last <- function(s) { s[[length(s)]] }
  ret <- list(env)
  while(identical(1,1)){
    ret <- c(ret, list(parent.env(last(ret))))
  }
  ret
}
0 Answers
Related