friendly / matlib

Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics
http://friendly.github.io/matlib/
65 stars 16 forks source link

V1.0.0 release? #65

Closed friendly closed 1 month ago

friendly commented 2 months ago

With the near completion of our work on latexMatrix() and friends, I'm thinking it will soon be time to release this as v 1.0.0. To this end, I'll bump the current version to 0.9.95

What tasks remain?

Feel free to add to this list

john-d-fox commented 2 months ago

With the changes I just pushed, I think I'm now finished with the bordering code. I have to move it into R/latexMatrix.R and document it, which I'll do soon.

I decided early-on not to propagate labels in matrix operations, but I'm not sure that's the right decision. I think that the rules should be reasonably clear, and it would be necessary to check for incompatible labels, which should be an error. Think, for example, of starting with a data matrix X with variables as column names and cases as row names. Something like t(X) %*% X would naturally have variable names for rows and columns. Similarly, cbind(A, B) would make sense only if A and B had the same row names. Maybe there are cases where dim names would be ambiguous but I don't immediately see that. Whether this is worth the effort is another question.

john-d-fox commented 2 months ago

I moved the matrix bordering code to R/latexMatrix.R and added documentation and a couple of examples.

philchalmers commented 2 months ago

@friendly I don't see what you mean with border matricies and Eqn. Here's what I get with the latest commit:

W <- latexMatrix(rownames=c("\\alpha_1", "\\alpha_2", "\\alpha_m"),
                 colnames=c("\\beta_1", "\\beta_2", "\\beta_n"))
W |> Eqn()

image

friendly commented 2 months ago

Must be a holdover from an earlier version. I just wanted to make sure it was working.

john-d-fox commented 2 months ago

I think this relates to the point I made yesterday that the changes to print.latexMatrix() weren't yet in R/latexMatrix.R; they are now.

BTW, I figured out a way to make the adjustments to cell and column-name spacing more flexible by introducing new optional arguments to print.latexMatrix() that take their default values from a couple of new options(). I'll upload that to GitHub shortly.

john-d-fox commented 2 months ago

About propagating labels in matrix operations: I tried out matsum(), called by +, as a test case, and it was very simple to accommodate labels. See the new file dev/operations-with-names.R for code and examples. In particular, I only had to add the following lines to matsum.latexMatrix():

dimnames <- dimnames(A)
  for (M in matrices)   {
    matlib:::numericDimensions(M)
    if (!isTRUE(all.equal(dimnames, dimnames(M)))){
      stop("matrix dimension names don't match")
    }
  }

...

Dimnames(A) <- dimnames

Thoughts?

friendly commented 2 months ago

That does look simple. Should be easy for most of the other operators also, perhaps except for kronecker(). That has a make.dimnames argument, for which the code in .kronecker is

    if (make.dimnames && !(is.null(dnx) && is.null(dny))) {
        if (is.null(dnx)) 
            dnx <- vector("list", length(dX))
        else if (ld < 0L) 
            dnx <- c(dnx, vector("list", -ld))
        tmp <- which(sapply(dnx, is.null))
        dnx[tmp] <- lapply(tmp, function(i) rep.int("", dX[i]))
        if (is.null(dny)) 
            dny <- vector("list", length(dY))
        else if (ld > 0) 
            dny <- c(dny, vector("list", ld))
        tmp <- which(sapply(dny, is.null))
        dny[tmp] <- lapply(tmp, function(i) rep.int("", dY[i]))
        k <- length(dim(opobj))
        dno <- vector("list", k)
        for (i in 1L:k) {
            tmp <- outer(dnx[[i]], dny[[i]], FUN = paste, sep = ":")
            dno[[i]] <- as.vector(t(tmp))
        }
        dimnames(opobj) <- dno
    }
friendly commented 2 months ago

@philchalmers For Eqn(), does it make sense to have the default for preview be controllable by an option, so the default would be

preview = getOption("preview")

In running multiple tests, I found I wanted to turn preview off on some occasions.

philchalmers commented 2 months ago

Setting preview globally for testing purposes makes sense to me. I've added an option to do this though the slot is called 'previewEqn' to match the 'quartoEqn' form.

john-d-fox commented 2 months ago

I'm moving the discussion of dimnames and matrix operations to the issue "Bordering a matrix #63."

friendly commented 2 months ago

I'm not sure where we are on this issue, that of finishing our work to release a new version.

Is the bordermatrix topic done enough?

I did notice that our work on simplifying the matrix operators simplified the descriptions in the vignette, but please check this over to see if there is something I missed or something that could be added.

If we're nearly done, I can do the pre-release CRAN tests & preparation for submission

john-d-fox commented 2 months ago

I'm not sure where we are on this issue, that of finishing our work to release a new version.

Is the bordermatrix topic done enough?

That's in the issue "Bordering a matrix," which I think has run its course.

I did notice that our work on simplifying the matrix operators simplified the descriptions in the vignette, but please check this over to see if there is something I missed or something that could be added.

If we're nearly done, I can do the pre-release CRAN tests & preparation for submission

I don't have anything else planned.

philchalmers commented 2 months ago

I have some small features to add, some of which have appeared in earlier issues, but nothing pressing that would prevent a CRAN release. Agreed that border matrix is flexible enough for PDF/HTMLs now.

friendly commented 2 months ago

I've added dev/Prepare_for_CRAN.R, which provides more comprehensive pre-CRAN tests than I've used before.

One gotcha (@john-d-fox): What is the correct URL for this paper:

> urlchecker::url_check()
✖ Error: README.md:150:144 404: Not Found
* Fox & Friendly, [_Visualizing Simultaneous Linear Equations, Geometric Vectors, and Least-Squares Regression with the matlib Package for R_](https://socialsciences.mcmaster.ca/jfox/Papers/matlib-useR2016.pdf),
john-d-fox commented 2 months ago

McMaster retired the social-sciences web server. There is no current URL for this paper. I do, of course, have a local copy on my computer (and in various backups). It's not a paper, BTW, but some slides for a conference presentation.

friendly commented 2 months ago

OK, thx. I'll remove that link

friendly commented 2 months ago

All pre-CRAN checks have passed, so I think this is good to go. But I'll wait til next week, in case there are any last minute thoughts.

friendly commented 1 month ago

Ran another devtools::check_win_devel() and other checks and all still OK. I'm going to release this now.

friendly commented 1 month ago

I've added dev/Prepare_for_CRAN.R, which provides more comprehensive pre-CRAN tests than I've used before.

One gotcha (@john-d-fox): What is the correct URL for this paper:

> urlchecker::url_check()
✖ Error: README.md:150:144 404: Not Found
* Fox & Friendly, [_Visualizing Simultaneous Linear Equations, Geometric Vectors, and Least-Squares Regression with the matlib Package for R_](https://socialsciences.mcmaster.ca/jfox/Papers/matlib-useR2016.pdf),

I found this paper at: https://facsocsci.mcmaster.ca/jfox/Papers/matlib-useR2016.pdf Is this where your stuff now is?

john-d-fox commented 1 month ago

I see that instead of removing the link to the presentation on the package, it was changed to https://facsocsci.mcmaster.ca/jfox/Papers/matlib-useR2016.pdf. I understand that McMaster intends to remove that website. It would be safer to copy the PDF to the GitHub archive and link it there.

friendly commented 1 month ago

OK, safer that way. I'll do that. BTW: There were some very nice examples there!

friendly commented 1 month ago

Added papers/matlib-useR-2016.pdf to avoid bad URL

friendly commented 1 month ago

DONE!