[Rd] Assigning a zero length vector to a list (PR#8157)
Duncan Murdoch
murdoch at stats.uwo.ca
Mon Sep 26 21:12:49 CEST 2005
On 9/26/2005 10:29 AM, Peter Dalgaard wrote:
> 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)
I agree. I think I see where the problem is (a test "length(y) <= 1" in
do_subassign2_dflt in subassign.c should be "length(y) == 1"; I'll try
to fix it.
Duncan Murdoch
>
>
>
> 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)
>
>
More information about the R-devel
mailing list