[Rd] cbind/rbind inconsistency with NULL parameter (PR#3585)
Prof Brian Ripley
ripley at stats.ox.ac.uk
Wed Jul 30 17:47:10 MEST 2003
On Wed, 30 Jul 2003, Tony Plate wrote:
> The R help for cbind/rbind states:
>
> > For `cbind' (`rbind'), vectors of zero length are ignored unless
> > the result would have zero rows (columns), for S compatibility.
> > (Zero-extent matrices do not occur in S and are not ignored in R.)
>
> I presume this means the S language as defined in the Blue Book ("The ^New
> S Language", Becker Chambers & Wilks, 1988), though in a brief reading I
> couldn't find any mention of such a constraint in the sections on Matrices
> and on Arrays (pages 126 thru 135 in my copy), or any mention of such
> constraints or behavior in the descriptions of the functions cbind/rbind()
> and matrix().
That's R code for `S-PLUS 3.4 compatibility', the system that used (at
least) to be used when checking for compatibility. E.g.
> cbind(a=1:3, b=integer(0), c=4:6)
a c
[1,] 1 4
[2,] 2 5
[3,] 3 6
> cbind(a=1:3, b=NULL, c=4:6)
a c
[1,] 1 4
[2,] 2 5
[3,] 3 6
under S-PLUS 3.4. This is explained (in some way) in the FAQ (Blue & White
books).
> FWIW, in S-plus 6.1 zero-extent matrices are allowed, and cbind/rbind do
> not seem to behave in this way (under Windows at least).
>
> E.g.:
> S6.1> matrix(nrow=0,ncol=0)
> logical matrix: 0 rows, 0 columns.
Fails in S-PLUS 3.4.
> S6.1> cbind(NULL, matrix(nrow=0,ncol=0))
> NULL
> S6.1> cbind(numeric(0), matrix(1, nrow=0,ncol=1))
> NULL
> S6.1>
>
> Also, FWIW, I have argued to Insightful that cbind/rbind returning NULL
> here is a undesirable (along with other examples of inconsistent behavior
> with zero-extent matrices), and they have replied that they have logged
> these as bugs to be fixed in a future release.
No one is attempting compatibility with things introduced in S-PLUS after
R.
> -- Tony Plate
>
> At Tuesday 04:31 PM 7/29/2003 +0100, Prof Brian Ripley wrote:
> >That's as documented, on the help page. (NULL is a zero-length argument.)
> >There's even a reason given.
> >
> >Exactly which part of the help page did you not understand?
> >
> >On Tue, 29 Jul 2003 jmartin2003 at notamusica.com wrote:
> >
> > > R-Version: 1.7.1 (2003-06-16)
> > > OS: Debian/GNU Linux
> > >
> > > cbind and rbind handle NULL parameters inconsistently.
> > >
> > > Consider:
> > > > cbind()
> > > NULL
> > > > cbind(NULL)
> > > NULL
> > >
> > > And:
> > > > cbind(diag(x = 1, 1, 1))
> > > [,1]
> > > [1,] 1
> > > > cbind(NULL, diag(x = 1, 1, 1))
> > > [,1]
> > > [1,] 1
> > >
> > > These seem to indicate that NULL parameters will be ignored in any call to
> > > cbind and rbind. However:
> > >
> > > > cbind(NULL, diag(x = 1, 0, 1))
> > > [,1] [,2]
> > >
> > > I.e. if one dimension of another parameter to cbind/rbind is zero,
> > > cbind/rbind will create a row/column from the NULL parameter.
> > >
> > > This inconsistency creates problems in the construction of matrices within
> > > loops and similar constructs.
> >
> >So? It's a documented feature.
> >
> >--
> >Brian D. Ripley, ripley at stats.ox.ac.uk
> >Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
> >University of Oxford, Tel: +44 1865 272861 (self)
> >1 South Parks Road, +44 1865 272866 (PA)
> >Oxford OX1 3TG, UK Fax: +44 1865 272595
> >
> >______________________________________________
> >R-devel at stat.math.ethz.ch mailing list
> >https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-devel
mailing list