Skip to content
Prev 56820 / 63424 Next

nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO)

Hi all,

Apologies if this has been asked before (a quick google didn't  find it for
me),and I know this is a case of behaving as documented but its so
unintuitive (to me at least) that I figured I'd bring it up here anyway. I
figure its probably going to not be changed,  but I'm happy to submit a
patch if this is something R-core feels can/should change.

So I recently got bitten by the fact that
[1] 2


I was checking whether the result of an rbind call had more than one row,
and that unexpected returned true, causing all sorts of shenanigans
downstream as I'm sure you can imagine.

Now I know that from ?rbind

For ?cbind? (?rbind?), vectors of zero length (including ?NULL?)
But there's a couple of things here. First, for the rowbind  case this
reads as "if there would be zero columns,  the vectors will not be
ignored". This wording implies to me that not ignoring the vectors is a
remedy to the "problem" of the potential for a zero-column return, but
thats not the case.  The result still has 0 columns, it just does not also
have zero rows. So even if the behavior is not changed, perhaps this
wording can be massaged for clarity?

The other issue, which I admit is likely a problem with my intuition, but
which I don't think I'm alone in having, is that even if I can't have a 0x0
matrix (which is what I'd prefer) I would have expected/preferred a 1x0
matrix, the reasoning being that if we must avoid a 0x0 return value, we
would do the  minimum required to avoid, which is to not ignore the first
length 0 vector, to ensure a non-zero-extent matrix, but then ignore the
remaining ones as they contain information for 0 new rows.

Of course I can program around this now that I know the behavior, but
again, its so unintuitive (even for someone with a fairly well developed
intuition for R's sometimes "quirky" behavior) that I figured I'd bring it
up.

Thoughts?

Best,
~G

Thread (13 messages)

Gabriel Becker nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Hadley Wickham nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 robin hankin nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Gabriel Becker nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Gabriel Becker nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Hervé Pagès nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Gabriel Becker nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Hervé Pagès nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Jan Gorecki nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Abby Spurdle nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 16 Martin Maechler nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 17 Gabriel Becker nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 17 Martin Maechler nrow(rbind(character(), character())) returns 2 (as documented but very unintuitive, IMHO) May 17