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.
Hi, Jack, well, I disagree: What do you expect to grab out of a bucket (= data frame) if you do not at all grab into it (indexing with an _empty_ index, i.e. with nothing)? And changing the sign of nothing is still nothing ... Hth -- Gerrit On Wed, 30 Oct 2013, 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. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
This is Circle 8.1.13 of 'The R Inferno'. http://www.burns-stat.com/documents/books/the-r-inferno/ Pat On 30/10/2013 13:04, 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. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Patrick Burns pburns at pburns.seanet.com twitter: @burnsstat @portfolioprobe http://www.portfolioprobe.com/blog http://www.burns-stat.com (home of: 'Impatient R' 'The R Inferno' 'Tao Te Programming')
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