Aren't you just seeing the effect of drop=TRUE? (at least with the examples you give below -- they all pick out a submatrix with extent one on some dimension)
AFAICT, matrices with a list as the underlying data work properly, e.g.: > vv <- array(as.list(1:12), 3:4) > vv [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > vv[1:2,] [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 > vv[1,,drop=FALSE] [,1] [,2] [,3] [,4] [1,] 1 4 7 10 > It can actually be useful sometimes to have a matrix (or array) of non-atomic objects -- wouldn't your proposed change remove (or at least damage) that functionality? -- Tony Plate Seth Falcon wrote: > Hi all, > > If dimensions are added to a list, it will become a matrix-like hybrid > that calls itself a matrix, but returns lists for subset operations. > > This was brought to my attention by a user that encountered such an > object and was quite confused by its behavior. Although I have not > found the code that created the object yet, I believe that code is > simply incorrect. Nevertheless, I wonder if R_data_class in attrib.c > should be a bit more discriminating and only return matrix or array > for atomic vectors. Perhaps something like this: > > --- a/src/main/attrib.c > +++ b/src/main/attrib.c > @@ -536,7 +536,7 @@ SEXP R_data_class(SEXP obj, Rboolean singleString) > if(n == 0) { > SEXP dim = getAttrib(obj, R_DimSymbol); > int nd = length(dim); > - if(nd > 0) { > + if(nd > 0 && isVectorAtomic(obj)) { > if(nd == 2) > klass = mkChar("matrix"); > else > > Here is an example that illustrates: > > vv <- as.list(1:24) > dim(vv) <- c(6, 4) > vv > [,1] [,2] [,3] [,4] > [1,] 1 7 13 19 > [2,] 2 8 14 20 > [3,] 3 9 15 21 > [4,] 4 10 16 22 > [5,] 5 11 17 23 > [6,] 6 12 18 24 > > class(vv) > [1] "matrix" > > typeof(vv) > [1] "list" > > vv[1, 1] > [[1]] > [1] 1 > > vv[1, ] > [[1]] > [1] 1 > > [[2]] > [1] 7 > > [[3]] > [1] 13 > > [[4]] > [1] 19 > > > + seth > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel