[R] omitting integer(0) rows from data frame

David Winsemius dwinsemius at comcast.net
Wed Oct 30 18:28:08 CET 2013


On Oct 30, 2013, at 6:04 AM, Jack Tanner wrote:

> I'm not sure if this is correct behavior or not, but it seems counterintuitive 
> to me:
> 
> dat <- data.frame(id=1:5, let=letters[1:5])
> # A. omits the first row
> dat[- 1, ]
> 
> # B. unexpectedly omits ALL rows
> dat[- integer(0), ]
> 
> It would be less surprising if there were no rows omitted in the (B) case.

Yes. It is surprising. It is also teh reason why the construction is also not returning what a user might expect:

dat[-which(dat$id >5), ]
#[1] id  let
#<0 rows> (or 0-length row.names)

(And yes I know that many people never use which with a logical. I'm just not one of those for what I consider good reasons.)

`subset` may be preferred,  at least for console interaction:

 subset( dat, !(id >5) )
  id let
1  1   a
2  2   b
3  3   c
4  4   d
5  5   e

-- 

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list