[R] how to test for the empty set

Duncan Murdoch murdoch at stats.uwo.ca
Mon Nov 24 18:54:56 CET 2008


On 24/11/2008 12:41 PM, G. Jay Kerns wrote:
> Dear R-help,
> 
> I first thought that the empty set (for a vector) would be NULL.
> 
> x <- c()
> x
> 
> However, the documentation seems to make clear that there _many_ empty
> sets depending on the vector's mode, namely, numeric(0), character(0),
> logical(0), etc.  This is borne out by
> 
> y <- letters[1:3]
> z <- letters[4:6]
> intersect(y,z)
> 
> which, of course, is non-NULL:
> 
> is.null(character(0))   # FALSE
> 
> So, how can we test if a vector is, say, character(0)?  The following
> doesn't (seem to) work:
> 
> x <- character(0)
> x == character(0)  # logical(0)
> 
> More snooping led to the following:
> 
> wiki.r-project.org/rwiki/doku.php?id=tips:surprises:emptysetfuncs
> 
> and at the bottom of the page it says "logical(0) is an empty set,
> thus is TRUE".  However, I get
> 
> isTRUE(logical(0))   # FALSE
> 
> but, on the other hand,
> 
> all.equal(x, character(0))  # TRUE
> 
> This would seem to be the solution, but am I missing something? and in
> particular, is there an elegant way to check in the case that the mode
> of the vector is not already known?
> 
> Thanks in advance for any insight you may have.

Why not just check the length?

length(x) == 0

will be true for NULL, and all of the empty vectors as well.

Duncan Murdoch



More information about the R-help mailing list