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 > > >-- ___________________________________________________ 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/
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? 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 ...) 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 >>> >> > >
?s 20:41 de 23/09/2023, Simone Giannerini escreveu:> 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 >>> >> > >Hello, The way I think of this behavior that made it intuitive is to think that in R matrices are column-major, therefore if length(NULL) == 0 then NULL can be seen as a matrix with one column and zero rows, no data. Here are other examples for which that reasoning works: m <- matrix(integer(0L)) NCOL(m) NROW(m) x <- integer(0L) NCOL(x) NROW(x) Not very convincing? Maybe with time... Hope this helps, Rui Barradas
On 23/09/2023 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.If you don't list any examples of problems, then the only possible conclusion is that there aren't any except obscure ones, so the answer is clearly that it is not worth it to make this change. Duncan Murdoch> > 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 >>> >> > >