[R] Idioms for empty dataframes

Thomas Lumley tlumley at u.washington.edu
Mon Oct 1 20:47:23 CEST 2007


On Mon, 1 Oct 2007, Ranjan Bagchi wrote:

> I'm fairly new to R, coming from a programming background -- it's quite
> nice to work with dataframes, though, as opposed to explicit iteration.
>
> One thing I've found, which is surprising is that zero-length dataframes
> seem to cause errors:

It's not zero-length data frames (at least in your example), but 
zero-length non-dataframes

>> t <- data.frame(bob=c(100))
>> order(t$bob)
> [1] 1
>> t1 <- t[t$bob < 50]

I think you expect this to be a data frame with one column and no rows, 
but
   > t[t$bob < 50]
   NULL data frame with 1 rows

This wass probably a typo for
  t1 <- t[t$bob < 50,]
Even this doesn't do what you want, because a single-column data frame 
decays into a vector on subsetting (FAQ 7.5), so you get
   > t[t$bob < 50,]
   numeric(0)


If you do
  t1 <- t[t$bob < 50,,drop=FALSE]
you get a data frame with one column and no rows, and then
  > order(t1$bob)
  integer(0)
more or less as you expected.


 	-thomas

Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle



More information about the R-help mailing list