>>>>> Aaron Lun >>>>> on Sun, 10 Feb 2019 15:22:17 +0000 writes:
> Dear list, > The Matrix package exhibits some unexpected behaviour in its arithmetic > methods for the edge case of a sparse matrix with a dimension of zero > length. The example below is the most illustrative, where changing the > contents of the vector causes the subtraction to fail for a sparse > matrix with no columns: > >> library(Matrix) >> x <- rsparsematrix(10, 0, density=0.1) >> >> x - rep(1, nrow(x)) # OK >> x - rep(0, nrow(x)) # fails > Error in .Ops.recycle.ind(e1, len = l2) : > vector too long in Matrix - vector operation This is indeed clearly a lapsus of us / mine as well as the next examples: Will all be fixed "around" .Ops.recycle.ind() > This is presumably because Matrix recognizes that subtraction of zero > preserves sparsity and thus uses a different method in the second case. > However, I would have expected subtraction of a zero vector to work if > subtraction of a general vector is permissible. This is accompanied by > a host of related errors for sparsity-preserving arithmetic: >> x / 1 # OK >> x / rep(1, nrow(x)) # fails > Error in .Ops.recycle.ind(e1, len = l2) : > vector too long in Matrix - vector operation >> >> x * 1 # OK >> x * rep(1, nrow(x)) # fails > Error in .Ops.recycle.ind(e1, len = l2) : > vector too long in Matrix - vector operation > > A different error is raised for a sparse matrix with no rows: >> y <- rsparsematrix(0, 10, density=0.1) >> >> y - numeric(1) # OK >> y - numeric(0) # fails > Error in y - numeric(0) : <Matrix> - numeric(0) is undefined Thank you, that's another lapsus, I will fix before the next release of Matrix. > I would have expected to just get 'y' back, given that the same code > works fine for other Matrix classes: >> z <- as(y, "dgeMatrix") >> z - numeric(0) # OK sure. > Correct behaviour of zero-dimension sparse matrices is practically > important to me; I develop a number of packages that rely on Matrix > classes, and in those packages, I do a lot of unit testing with zero- > dimension inputs. This ensures that my functions return sensible > results or fail gracefully in edge cases that might be encountered by > users. The current behaviour of sparse Matrix arithmetic causes my unit > tests to fail for no (obvious) good reason. Interesting that you need 0-dim sparse matrices. I agree they should work, too... and will fix (but it seems they haven't been used much by others; else I would have expected these cases to have been reported long ago). Further note that in R, maintainer("Matrix") gives a nice address to send such findings. (similarly for all other R packages !) Thank you very much once more! Martin > Best, > Aaron Lun > Research Associate > CRUK Cambridge Institute > University of Cambridge -- Martin <Maechler at ....> Seminar für Statistik, ETH Zürich HG G 16 Rämistrasse 101 CH-8092 Zurich, SWITZERLAND ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.