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
}