>>>>> 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

______________________________________________

[hidden email] mailing list -- To UNSUBSCRIBE and more, see

https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide

http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.