[Rd] solve.default(a, b) should not ignore names(dimnames(.))
Mikael Jagan
j@g@nmn2 @end|ng |rom gm@||@com
Thu Nov 10 19:10:50 CET 2022
Hello,
Currently, solve.default() is defined such that
> identical(dimnames(solve.default(a, b)),
list(dimnames(a)[[2L]], dimnames(b)[[2L]]))
is always TRUE, i.e., ignoring names(dimnames(a)) and names(dimnames(b)).
Hence we see:
> a <- b <- diag(2L)
> dimnames(a) <- list(A1 = c("a11", "a12"), A2 = c("a21", "a22"))
> dimnames(b) <- list(B1 = c("b11", "b12"), B2 = c("b21", "b22"))
> a
A2
A1 a21 a22
a11 1 0
a12 0 1
> b
B2
B1 b21 b22
b11 1 0
b12 0 1
> solve.default(a, b)
b21 b22
a21 1 0
a22 0 1
I claim that solve.default() should be changed to instead give:
> identical(dimnames(solve.default(a, b)),
c(dimnames(a)[2L], dimnames(b)[2L]))
This would make solve.default() consistent with `%*%`, which
_does_ respect names(dimnames(.)) :
> a %*% b
B2
A1 b21 b22
a11 1 0
a12 0 1
If others agree, then I would submit a minimal patch to the R-level
solve.default() in src/library/base/R/solve.R and to the C-level
La_solve() and La_solve_cmplx() in src/modules/lapack/Lapack.c ...
Mikael
More information about the R-devel
mailing list