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("pak") pak::pak("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!" #> └─NULL
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:0x126225d88] <list> #> ├─[2:0x1114afb90] <int> #> ├─[2:0x1114afb90] #> └─[2:0x1114afb90] e <- rlang::env() e$self <- e ref(e) #> █ [1:0x126563548] <env> #> └─self = [1:0x126563548]
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. ├─f(cst()) #> 2. │ └─g(x) #> 3. │ └─h(x) #> 4. └─lobstr::cst()