[Rd] NROW and NCOL on NULL
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sat Sep 23 23:38:29 CEST 2023
À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 using 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
More information about the R-devel
mailing list