| is.recursive {base} | R Documentation |
Is an Object Atomic or Recursive?
Description
is.atomic returns TRUE if x is of an atomic type
and FALSE otherwise.
is.atomic(NULL) returns FALSE since R version 4.4.0.
is.recursive returns TRUE if x has a recursive
(list-like) structure and FALSE otherwise.
Usage
is.atomic(x)
is.recursive(x)
Arguments
x |
object to be tested. |
Details
is.atomic is true for the atomic types
("logical", "integer", "numeric",
"complex", "character" and "raw").
Most types of objects are regarded as recursive. Exceptions are the atomic
types, NULL, symbols (as given by as.name),
S4 objects with slots, external pointers, and—rarely visible
from R—weak references and byte code, see typeof.
It is common to call the atomic types ‘atomic vectors’, but
note that is.vector imposes further restrictions: an
object can be atomic but not a vector (in that sense).
These are primitive functions.
References
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
See Also
is.list,
is.language, etc,
and the demo("is.things").
Examples
require(stats)
is.a.r <- function(x) c(is.atomic(x), is.recursive(x))
is.a.r(c(a = 1, b = 3)) # TRUE FALSE
is.a.r(list()) # FALSE TRUE - a list is a list
is.a.r(list(2)) # FALSE TRUE
is.a.r(lm) # FALSE TRUE
is.a.r(y ~ x) # FALSE TRUE
is.a.r(expression(x+1)) # FALSE TRUE
is.a.r(quote(exp)) # FALSE FALSE
is.a.r(NULL) # FALSE FALSE
# Reproduce pre-4.4 behavior of is.atomic()
is.atomicN <- function(x) is.atomic(x) || is.null(x)
is.atomicN(NULL) # TRUE