Please stop this line of queries/"suggestions/speculations and read the relevant docs **carefully**.
For example, from ?"==" "Note Do not use == and != for tests, such as in if expressions, where you must get a single TRUE or FALSE. Unless you are absolutely sure that nothing unusual can happen, you should use the identical <http://127.0.0.1:22171/help/library/base/help/identical> function instead. " So you have already violated that specific warning, which led to the confusion you evidence. Specifically: > Matrix(1)== Matrix(1) 1 x 1 Matrix of class "lsyMatrix" [,1] [1,] TRUE That is, the result is not a logical but a (S4) object of class "lsyMatrix" that contains a logical. Whence your (expected) error message. Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Mar 12, 2018 at 10:53 AM, Stepan Kasal <ka...@ucw.cz> wrote: > Hello, > > On Mon, Mar 12, 2018 at 09:30:59AM -0700, William Dunlap wrote: > > Why don't you use > > stopifnot( all(m1 == m2) ) > > ? > > good question. Even though I use > aseert np.all(m1 == m2) > when working with NumPy, I got accustomed to the "handy shortcut" > that I can omit all() with R vectors and matrices. > > Then I got trapped with the thing I reported. > > On a second thought, omitting all() might have been bad idea from > the beginning; I should rather write all() routinely. > (It also reminds me that all.equal() is the right one in most cases.) > > Is it true that using stopifnot() with non-scalar is considerd bad style? > > If yes, could be perhaps stopifnot() enhanced to issue a warning to > teach new users of R, at least when they start using library(Matrix)? > > If not, then enhancing stopifnot() to handle the case may be a good idea. > > I also noticed the following: > > > a <- Matrix(1) > > stopifnot(a == a) > Error: a == a is not TRUE > > if(a==a)print(1) > Error in if (a == a) print(1) : argument is not interpretable as logical > > Neither does work, but the first error message is much more confusing. > > When thinking about it, stopifnot() should really issue a better error > message in this case. Patch attached. But I should perhaps send > it also to R-devel. > > Stepan Kasal > > > > On Mon, Mar 12, 2018 at 8:15 AM, Stepan Kasal <ka...@ucw.cz> wrote: > > > > > Hello, > > > I stumbled over a problem: > > > stopifnot(m1 == m2) > > > > > > It works with vector or matrix, but does not work for classes from > Matrix > > > package. > > > > > > In the source of stopifnot(), there is all(m1 == m2) that would just > work, > > > but there is also is.logical(m1 == m2) that id FALSE. > > > > > > Would it be possible if Matrix package redefined stopifnot() ? > > > > > > (If there is a bug tracking database for package Matrix, I would be > happy > > > to insert this report there.) > > > > > > Thank you very much for the package, > > > Stepan Kasal > > > > > > ______________________________________________ > > > 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. > > > > > ______________________________________________ > 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. > [[alternative HTML version deleted]] ______________________________________________ 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.