is.recursive              package:base              R Documentation

Is an Object Atomic or Recursive?

Description:

     'is.atomic' returns 'TRUE' if 'x' is an atomic vector (or 'NULL')
     and 'FALSE' otherwise.

     '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:

     These are generic: you can write methods to handle specific
     classes of objects, see InternalMethods.  The description here
     applies only to the default method.

     'is.atomic' is true for the atomic vector types ('"logical"',
     '"integer"', '"numeric"', '"complex"', '"character"' and '"raw"')
     and 'NULL'.

     Most types of language objects are regarded as recursive: those
     which are not are the atomic vector types, 'NULL' and symbols (as
     given by 'as.name').

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:

     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 ??
     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 (not in 0.62.3!)

