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 -- Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research Center http://bioconductor.org ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel