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