From p.dalgaard at biostat.ku.dk  Mon Sep 26 16:29:59 2005
From: p.dalgaard at biostat.ku.dk (p.dalgaard@biostat.ku.dk)
Date: Mon, 26 Sep 2005 16:29:59 +0200 (CEST)
Subject: [Rd] Assigning a zero length vector to a list (PR#8157)
Message-ID: <20050926142959.0E5591C9C3@slim.kubism.ku.dk>

Duncan Murdoch <murdoch at stats.uwo.ca> writes:

> After foo<-list(), foo$bar is NULL, so we can simplify this.
> 
> Here's a simpler version:
> 
> # These work, which is a bit of a surprise, but there is some 
> inconsistency:   one x becomes a list, the other is numeric:
>  > x <- NULL
>  > x[[1]] <- 1:10
>  > x
> [[1]]
>   [1]  1  2  3  4  5  6  7  8  9 10
> 
>  > x <- NULL
>  > x[[1]] <- 1
>  > x
> [1] 1
> 
> 
> # This generates the same bug as the above:
>  > x <- NULL
>  > x[[1]] <- numeric(0)
>  > x
> [1] 4.250083e-314
> 
> It looks like we're trying to be too clever with handling assignments to 
> components of NULL.  Wouldn't it make more sense for those to generate 
> an error?

Once upon a time, we had pairlists, and NULL was the empty list. This
looks like it might be a relic. If so, it likely also predates
consistent handling of zero-length vectors, so something is getting
confused. I think it would be reasonable to expect similar results to
this: 

> x<-list()
> x[[1]] <- numeric(0)
> x
[[1]]
numeric(0)

 

S-PLUS also tries to handle NULL as a zero length list, with some
anomalies:

> x <- NULL
> x[[1]] <- numeric(0)
> x
$value:
numeric(0)


> x <- list()
> x[[1]] <- numeric(0)
> x
[[1]]:
numeric(0)


-- 
   O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327907



[Rd] Assigning a zero length vector to a list (PR#8157)
p.dalgaard@biostat.ku.dk