lobstr
lobstr provides tools in the same vein as str()
, which allow you to
dig into the detail of an object.
Installation
Install the released version of lobstr from CRAN:
install.packages("lobstr")
You can install the development version with:
# install.packages("devtools")
devtools::install_github("r-lib/lobstr")
Example
Abstract syntax trees
ast()
draws the abstract syntax tree of R expressions:
ast(a + b + c)
#> โโ`+`
#> โโโโ`+`
#> โ โโa
#> โ โโb
#> โโc
ast(function(x = 1) {
if (x > 0) print("Hi!")
})
#> โโ`function`
#> โโโโx = 1
#> โโโโ`{`
#> โ โโโโ`if`
#> โ โโโโ`>`
#> โ โ โโx
#> โ โ โโ0
#> โ โโโโprint
#> โ โโ"Hi!"
#> โโ<inline srcref>
References
ref()
shows hows objects can be shared across data structures by
digging into the underlying __ref__erences:
x <- 1:1e6
y <- list(x, x, x)
ref(y)
#> โ [1:0x7fed114eaea8] <list>
#> โโ[2:0x7fed21f373b8] <int>
#> โโ[2:0x7fed21f373b8]
#> โโ[2:0x7fed21f373b8]
e <- rlang::env()
e$self <- e
ref(e)
#> โ [1:0x7fecf1856f00] <env>
#> โโself = [1:0x7fecf1856f00]
A related tool is obj_size()
, which computes the size of an object
taking these shared references into account:
obj_size(x)
#> 680 B
obj_size(y)
#> 760 B
Call stack trees
cst()
shows how frames on the call stack are connected:
f <- function(x) g(x)
g <- function(x) h(x)
h <- function(x) x
f(cst())
#> โ
#> 1. โโglobal f(cst())
#> 2. โ โโglobal g(x)
#> 3. โ โโglobal h(x)
#> 4. โโlobstr::cst()