A (nested) list with atomic objects in all final nodes of the list-tree is unlistable - checked with
is_unlistable(l, DF.as.list = FALSE)
TRUE treats data frames like (sub-)lists;
FALSE like atomic elements.
DF.as.list = TRUE is defined as
all(rapply(l, is.atomic)), whereas
DF.as.list = FALSE yields checking using
all(unlist(rapply2d(l, function(x) is.atomic(x) || is.list(x)), use.names = FALSE)), assuming that data frames are lists composed of atomic elements. If
l contains data frames, the latter can be a lot faster than applying
is.atomic to every data frame column.