objSize {reproducible} | R Documentation |
Wrapper around lobstr::obj_size
Description
This function attempts to estimate the real object size of an object. If the object
has pass-by-reference semantics, it may not estimate the object size well without
a specific method developed. For the case of terra
class objects, this will
be accurate (both RAM and file size), but only if it is not passed inside
a list or environment. To get an accurate size of these, they should be passed
individually.
Usage
objSize(x, quick = FALSE, ...)
objSizeSession(sumLevel = Inf, enclosingEnvs = TRUE, .prevEnvirs = list())
Arguments
x |
An object |
quick |
Logical. If |
... |
Additional arguments (currently unused), enables backwards compatible use. |
sumLevel |
Numeric, indicating at which depth in the list of objects should the
object sizes be summed (summarized). Default is |
enclosingEnvs |
Logical indicating whether to include enclosing environments.
Default |
.prevEnvirs |
For internal account keeping to identify and prevent duplicate counting |
Details
For functions, a user can include the enclosing environment as described
https://www.r-bloggers.com/2015/03/using-closures-as-objects-in-r/ and
http://adv-r.had.co.nz/memory.html.
It is not entirely clear which estimate is better.
However, if the enclosing environment is the .GlobalEnv
, it will
not be included even though enclosingEnvs = TRUE
.
objSizeSession
will give the size of the whole session, including loaded packages.
Because of the difficulties in calculating the object size of base
and methods
packages and Autoloads
, these are omitted.
Value
This will return the result from lobstr::obj_size
, i.e., a lobstr_bytes
which is a numeric
. If quick = FALSE
, it will also have an attribute,
"objSize", which will
be a list with each element being the objSize
of the individual elements of x
.
This is particularly useful if x
is a list
or environment
.
However, because of the potential for shared memory, the sum of the individual
elements will generally not equal the value returned from this function.
Examples
library(utils)
foo <- new.env()
foo$b <- 1:10
foo$d <- 1:10
objSize(foo) # all the elements in the environment
utils::object.size(foo) # different - only measuring the environment as an object
utils::object.size(prepInputs) # only the function, without its enclosing environment
objSize(prepInputs) # the function, plus its enclosing environment
os1 <- utils::object.size(as.environment("package:reproducible"))
(os1) # very small -- just the environment container