I believe that I may have found a bug in R. The top code sample gives an error as shown. However, by simply switching which field is initialized first as in the bottom code sample, it works as expected. This gives an error: a <- NULL a[["field1"]] <- 1 a[["field2"]] <- matrix(c(2,1), 1) Error in a[["field2"]] <- matrix(c(2, 1), 1) : more elements supplied than there are to replace Yet, this works as expected: a <- NULL a[["field2"]] <- matrix(c(2,1), 1) a[["field1"]] <- 1 Daniel Wilhelm
Daniel Wilhelm wrote:> I believe that I may have found a bug in R. The top code sample gives > an error as shown. However, by simply switching which field is > initialized first as in the bottom code sample, it works as expected. > > > This gives an error: > > > a <- NULL > a[["field1"]] <- 1 > a[["field2"]] <- matrix(c(2,1), 1) > > Error in a[["field2"]] <- matrix(c(2, 1), 1) : > more elements supplied than there are to replace > > > > Yet, this works as expected: > > a <- NULL > a[["field2"]] <- matrix(c(2,1), 1) > a[["field1"]] <- 1 >I'm surprised any of these work. I didn't expect to be able to index NULL, but the clue is there in the man page for "[[": "the left-hand-side is coerced as needed to accept the values." What's happening is that in the first case, a becomes a numeric vector, and you can't assign a matrix to an element of a numeric vector. It won't fit. In the second case, a becomes a list, and the assignments both succeed. Duncan Murdoch
On Mon, 16 Jul 2007, Daniel Wilhelm wrote:> I believe that I may have found a bug in R. The top code sample givesYou have 'merely' found a bug in your understanding. What type did you expect 'a' to be? If you expected a list, that is not what happens in the first example, and you need a <- list() or, better, a <- vector("list", 2)> an error as shown. However, by simply switching which field is > initialized first as in the bottom code sample, it works as expected. > > > This gives an error: > > > a <- NULL > a[["field1"]] <- 1Now a is numeric> a[["field2"]] <- matrix(c(2,1), 1) > > Error in a[["field2"]] <- matrix(c(2, 1), 1) : > more elements supplied than there are to replace > > > > Yet, this works as expected: > > a <- NULL > a[["field2"]] <- matrix(c(2,1), 1)Now a is a list> a[["field1"]] <- 1 > > > > Daniel Wilhelm > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595