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()

Copy Link

Version

Down Chevron

Install

install.packages('lobstr')

Monthly Downloads

36,315

Version

1.1.2

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Last Published

June 22nd, 2022

Functions in lobstr (1.1.2)