From murdoch@dunc@n @ending from gm@il@com  Mon Jul 23 21:17:25 2018
From: murdoch@dunc@n @ending from gm@il@com (Duncan Murdoch)
Date: Mon, 23 Jul 2018 15:17:25 -0400
Subject: [Rd] Is NULL a vector?
In-Reply-To: <CABdHhvHuCuaytOP-5VOYO=5+fiQQPNFPYeeU-jJrN9=k_1t+yA@mail.gmail.com>
References: <CABdHhvHuCuaytOP-5VOYO=5+fiQQPNFPYeeU-jJrN9=k_1t+yA@mail.gmail.com>
Message-ID: <12e7b0be-5284-39a0-e3d9-b1558901bc53@gmail.com>

On 23/07/2018 3:03 PM, Hadley Wickham wrote:
> Hi all,
> 
> Would you generally consider NULL to be a vector? 

According to the language definition (in the doc directory), it is not: 
"Vectors can be thought of as contiguous cells containing data. Cells 
are accessed through indexing operations such as x[5]. More details are 
given in Indexing.

R has six basic (?atomic?) vector types: logical, integer, real, 
complex, string (or character) and raw. The modes and storage modes for 
the different vector types are listed in the following table."

and later

"There is a special object called NULL. It is used whenever there is a 
need to indicate or specify that an object is absent. It should not be 
confused with a vector or list of zero length."

Duncan Murdoch

Base R functions are
> a little inconsistent:
> 
> ## In favour
> 
> ``` r
> identical(as.vector(NULL), NULL)
> #> [1] TRUE
> 
> identical(as(NULL, "vector"), NULL)
> #> [1] TRUE
> 
> # supports key vector vector generics
> length(NULL)
> #> [1] 0
> NULL[c(3, 4, 5)]
> #> NULL
> NULL[[1]]
> #> NULL
> ```
> 
> ## Against
> 
> ``` r
> is.vector(NULL)
> #> [1] FALSE
> 
> is(NULL, "vector")
> #> [1] FALSE
> ```
> 
> ## Abstentions
> 
> ``` r
> is.atomic(NULL)
> #> [1] TRUE
> # documentation states "returns NULL if x is of an atomic type (or NULL)"
> # is "or" exclusive or inclusive?
> ```
> 
> Hadley
>



[Rd] Is NULL a vector?
Duncan Murdoch