Thank you for your comment,
On Sat, Sep 23, 2023 at 9:51?PM Ben Bolker <bbolker at gmail.com>
wrote:>
> This is certainly worth discussing, but there's always a heavy
> burden of back-compatibility; how much better would it be for NCOL and
> NROW to both return zero, vs. the amount of old code that would be broken?
I do not have an answer to this question but it seems to me that code
that relies upon NCOL(NULL) being 1 is not extremely good (and
portable).
>
> Furthermore, the reason for this behaviour is justified as
> consistency with the behaviour of as.matrix() and cbind() for
> zero-length vectors, from ?NCOL:
>
> ## as.matrix() produces 1-column matrices from 0-length vectors,
> ## and so does cbind() :
>
> (of course you could argue that this behaviour should be changed as
> well ...)
>
>
Yes, it is documented and somehow clashes with the more intuitive
behaviour of subsetting matrices
> a <- matrix(1:4,2,2)> a
[,1] [,2]
[1,] 1 3
[2,] 2 4> a2 <- a[,-(1:2)]
> a2
[1,]
[2,]> dim(a2)
[1] 2 0
NULL is often used to declare an undefined value for the argument of a
function. If such an argument is potentially a matrix, then using NULL
as the default requires additional code to check for the number of
columns and use it in the code.
The same holds to a lesser extent for functions that are expected to
return a matrix and return NULL instead.
Kind regards,
Simone
> On 2023-09-23 3:41 p.m., Simone Giannerini wrote:
> > I know it's documented and I know there are other ways to guard
> > against this behaviour, once you know about this.
> > The point is whether it might be worth it to make NCOL and NROW return
> > the same value on NULL and make R more consistent/intuitive and
> > possibly less error prone.
> >
> > Regards,
> >
> > Simone
> >
> > On Sat, Sep 23, 2023 at 7:50?PM Duncan Murdoch <murdoch.duncan at
gmail.com> wrote:
> >>
> >> It's been documented for a long time that NCOL(NULL) is 1.
What
> >> particular problems did you have in mind? There might be other
ways to
> >> guard against them.
> >>
> >> Duncan Murdoch
> >>
> >> On 23/09/2023 1:43 p.m., Simone Giannerini wrote:
> >>> Dear list,
> >>>
> >>> I do not know what would be the 'correct' answer to
the following but
> >>> I think that they should return the same value to avoid
potential
> >>> problems and hard to debug errors.
> >>>
> >>> Regards,
> >>>
> >>> Simone
> >>> ---------------------------------------
> >>>
> >>>> NCOL(NULL)
> >>> [1] 1
> >>>
> >>>> NROW(NULL)
> >>> [1] 0
> >>>
> >>>> sessionInfo()
> >>> R version 4.3.1 RC (2023-06-08 r84523 ucrt)
> >>> Platform: x86_64-w64-mingw32/x64 (64-bit)
> >>> Running under: Windows 11 x64 (build 22621)
> >>>
> >>> Matrix products: default
> >>>
> >>>
> >>> locale:
> >>> [1] LC_COLLATE=Italian_Italy.utf8 LC_CTYPE=Italian_Italy.utf8
> >>> [3] LC_MONETARY=Italian_Italy.utf8 LC_NUMERIC=C
> >>> [5] LC_TIME=Italian_Italy.utf8
> >>>
> >>> time zone: Europe/Rome
> >>> tzcode source: internal
> >>>
> >>> attached base packages:
> >>> [1] stats graphics grDevices utils datasets methods
base
> >>>
> >>> loaded via a namespace (and not attached):
> >>> [1] compiler_4.3.1
> >>>
> >>
> >
> >
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
--
___________________________________________________
Simone Giannerini
Dipartimento di Scienze Statistiche "Paolo Fortunati"
Universita' di Bologna
Via delle belle arti 41 - 40126 Bologna, ITALY
Tel: +39 051 2098262 Fax: +39 051 232153
https://simonegiannerini.net/