On 9/26/2005 10:29 AM, Peter Dalgaard wrote: > Duncan Murdoch <[EMAIL PROTECTED]> 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) > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel