Last updated on 2026-07-23 13:49:53 CEST.
| Flavor | Version | Tinstall | Tcheck | Ttotal | Status | Flags |
|---|---|---|---|---|---|---|
| r-devel-linux-x86_64-debian-clang | 1.0-0 | 11.98 | 92.36 | 104.34 | NOTE | |
| r-devel-linux-x86_64-debian-gcc | 1.0-0 | 7.80 | 71.72 | 79.52 | ERROR | |
| r-devel-linux-x86_64-fedora-clang | 1.0-0 | 18.00 | 155.26 | 173.26 | NOTE | |
| r-devel-linux-x86_64-fedora-gcc | 1.0-0 | 8.00 | 71.50 | 79.50 | NOTE | |
| r-devel-windows-x86_64 | 1.0-0 | 18.00 | 124.00 | 142.00 | NOTE | |
| r-patched-linux-x86_64 | 1.0-0 | 10.03 | 88.66 | 98.69 | OK | |
| r-release-linux-x86_64 | 1.0-0 | 9.98 | 88.47 | 98.45 | OK | |
| r-release-macos-arm64 | 1.0-0 | 3.00 | 30.00 | 33.00 | OK | |
| r-release-macos-x86_64 | 1.0-0 | 9.00 | 113.00 | 122.00 | OK | |
| r-release-windows-x86_64 | 1.0-0 | 17.00 | 126.00 | 143.00 | OK | |
| r-oldrel-macos-arm64 | 1.0-0 | OK | ||||
| r-oldrel-macos-x86_64 | 1.0-0 | 9.00 | 165.00 | 174.00 | OK | |
| r-oldrel-windows-x86_64 | 1.0-0 | 22.00 | 151.00 | 173.00 | OK |
Version: 1.0-0
Check: R code for possible problems
Result: NOTE
Found calls to structure() using deprecated special names:
expm/man/expm.Higham08.Rd (.Dim: 1)
expm/man/expm.Rd (.Dim: 1)
'.Dim' should be changed to 'dim'.
Flavors: r-devel-linux-x86_64-debian-clang, r-devel-linux-x86_64-debian-gcc, r-devel-linux-x86_64-fedora-clang, r-devel-linux-x86_64-fedora-gcc, r-devel-windows-x86_64
Version: 1.0-0
Check: re-building of vignette outputs
Result: NOTE
Warning in re-building vignettes:
From the bibliography engine:
I didn't find a database entry for "Matrix"
Flavors: r-devel-linux-x86_64-debian-clang, r-devel-linux-x86_64-debian-gcc, r-devel-linux-x86_64-fedora-clang, r-devel-linux-x86_64-fedora-gcc, r-devel-windows-x86_64
Version: 1.0-0
Check: tests
Result: ERROR
Running ‘Frechet-test.R’ [1s/2s]
Running ‘bal-ex.R’ [2s/2s]
Running ‘ex.R’ [1s/2s]
Running ‘ex2.R’ [2s/3s]
Running ‘exact-ex.R’ [4s/6s]
Running ‘expm-Cond.R’ [1s/1s]
Running ‘log+sqrt.R’ [3s/4s]
Running ‘matpow-ex.R’ [3s/3s]
Running the tests in ‘tests/bal-ex.R’ failed.
Complete output:
> library(expm)
Loading required package: Matrix
Attaching package: 'expm'
The following object is masked from 'package:Matrix':
expm
> source(system.file("test-tools.R", package= "expm"), keep.source=FALSE)## -> assertError()...
Loading required package: tools
>
> ## A matrix with 'Inf'
> mI <- rbind(0, c(-Inf, Inf, 0, 0), 0, 0)
> bal3 <-
+ list(dB = dgebal(mI, "B"), # = default
+ dP = dgebal(mI, "P"),
+ dN = dgebal(mI, "N"))
Warning messages:
1: In dgebal(mI, "B") : 'dgebal' is deprecated.
Use 'balance' instead.
See help("Deprecated")
2: In dgebal(mI, "P") : 'dgebal' is deprecated.
Use 'balance' instead.
See help("Deprecated")
3: In dgebal(mI, "N") : 'dgebal' is deprecated.
Use 'balance' instead.
See help("Deprecated")
> str(bal3)
List of 3
$ dB:List of 4
..$ z : num [1:4, 1:4] Inf 0 0 0 -Inf ...
..$ scale: num [1:4] 1 1 3 4
..$ i1 : int 1
..$ i2 : int 1
$ dP:List of 4
..$ z : num [1:4, 1:4] Inf 0 0 0 -Inf ...
..$ scale: num [1:4] 1 1 3 4
..$ i1 : int 1
..$ i2 : int 1
$ dN:List of 4
..$ z : num [1:4, 1:4] 0 -Inf 0 0 0 ...
..$ scale: num [1:4] 1 1 1 1
..$ i1 : int 1
..$ i2 : int 4
> stopifnot(identical(mI, bal3$dN$z),
+ with(bal3, all.equal(dB, dP, tol=1e-14)),
+ all.equal(bal3$dB$z, rbind(c(Inf,-Inf,0,0), 0,0,0), tol=1e-14),
+ all.equal(bal3$dB$scale, c(1,1,3,4)))
> assertError(dgebal(mI, "S"), verbose=TRUE)# gave infinite loop
Asserted error: R_dgebal(*, type="S"): Infinite matrix entry
>
>
>
> ## Compare the two different "balance" pre-conditioning versions in Ward77:
> set.seed(1)
> mList <- lapply(integer(100), function(...) rSpMatrix(20, nnz=80))
> re20 <- sapply(mList, function(M)
+ relErr(expm(M, precond = "2bal"),
+ expm(M, precond = "1bal")))
> re20 ## ahh.: zero or ~ 1e-13 ... good
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
> table(re20 == 0)
TRUE
100
> summary(re20[re20 != 0])
Min. 1st Qu. Median Mean 3rd Qu. Max.
NA NA NA NaN NA NA
> ## Pentium M (ubuntu)
> ## Min. 1st Qu. Median Mean 3rd Qu. Max.
> ## 2.593e-14 8.703e-14 1.282e-13 2.434e-13 4.177e-13 6.295e-13
>
> demo(balanceTst) #-> the function definition and the first few examples
demo(balanceTst)
---- ~~~~~~~~~~
> balanceTst <- function(A) {
+
+ ## Purpose: Consistency checking of balance() {was "dgebal()"}
+ ## ----------------------------------------------------------------------
+ ## Arguments: a square matrix
+ ## ----------------------------------------------------------------------
+ ## Author: Martin Maechler, 20 Feb 2008 and on
+
+ n <- dim(A)[1]
+ ## do *the* three calls and look at result
+ P <- balance(A, "P")
+
+ doPerm <- function(A, pp, i1, i2) {
+ stopifnot(length(pp) == n, dim(A) == c(n,n),
+ 1 <= i1, i1 <= i2, i2 <= n)
+ A. <- A
+ if(i2 < n) { ## The upper part
+ for(i in n:(i2+1)) { # 'p2' in *reverse* order
+ ## swap i <-> pp[i] both rows and columns
+ tt <- A.[,i]; A.[,i] <- A.[,pp[i]]; A.[,pp[i]] <- tt
+ tt <- A.[i,]; A.[i,] <- A.[pp[i],]; A.[pp[i],] <- tt
+ }
+ }
+ if(i1 > 1) { ## The lower part
+ for(i in 1:(i1-1)) { # 'p1' in *forward* order
+ tt <- A.[,i]; A.[,i] <- A.[,pp[i]]; A.[,pp[i]] <- tt
+ tt <- A.[i,]; A.[i,] <- A.[pp[i],]; A.[pp[i],] <- tt
+ }
+ }
+ A.
+ }
+
+ checkPerm <- function(P, orig.A) {
+ didPerm <- ((leftP <- (i1 <- P$i1) != 1L) |
+ (rightP <- (i2 <- P$i2) != n))
+ if(didPerm) { ## *had* permutation -- now check my idea about it
+ pp <- as.integer(P$scale)
+ ## Permute A to become P$z :
+ A. <- doPerm(orig.A, pp = pp, i1=i1, i2=i2)
+ stopifnot(isTRUE(all.equal(A., P$z, tolerance = 1e-15)))
+
+ ## Now the reverse: Use pp[] and permute A. "back to A":
+ if(leftP) { ## The lower part
+ for(i in (i1-1):1) { # 'p1' in *reverse* order
+ tt <- A.[,i]; A.[,i] <- A.[,pp[i]]; A.[,pp[i]] <- tt
+ tt <- A.[i,]; A.[i,] <- A.[pp[i],]; A.[pp[i],] <- tt
+ }
+ }
+ if(rightP) { ## The upper part
+ for(i in (i2+1):n) { # 'p2' in *forward* order
+ ## swap i <-> pp[i] both rows and columns
+ tt <- A.[,i]; A.[,i] <- A.[,pp[i]]; A.[,pp[i]] <- tt
+ tt <- A.[i,]; A.[i,] <- A.[pp[i],]; A.[pp[i],] <- tt
+ }
+ }
+ stopifnot(isTRUE(all.equal(A., orig.A, tolerance = 1e-15)))
+ }
+ }
+ checkPerm(P, orig.A = A)
+
+ S <- balance(P$z, "S")# "S" starting from result of "P"
+ stopifnot(S$i1 == 1, S$i2 == n)
+
+ ## Now check the scaling
+ checkScal <- function (d, A1, A2) {
+ stopifnot(length(d) == n, dim(A1) == dim(A2), dim(A2) == c(n,n))
+
+ ## A.scaled <- diag(1/d, n) \%*\% A1 \%*\% diag(d, n)
+ ## more efficiently:
+ A.scaled <- A1 * (rep(d, each = n) / d)
+ stopifnot(isTRUE(all.equal(A2, A.scaled, tolerance = 1e-15)))
+ ## Check the reverse:
+ S.rescaled <- A2 * (d * rep(1/d, each = n))
+ stopifnot(isTRUE(all.equal(A1, S.rescaled, tolerance = 1e-15)))
+ }
+ checkScal(d = S$scale, A1 = P$z, A2 = S$z)
+
+ B <- balance(A, "B")# "B" : B[oth]
+ stopifnot(P$i1 == B$i1, P$i2 == B$i2)
+ ## now check *both* permutation and scaling
+
+ A.perm <- doPerm(A, pp = as.integer(B$scale), i1=B$i1, i2=B$i2)
+ ## checkPerm(B, orig.A = A)
+
+ dB <- B$scale
+ dB[c(if(B$i1 > 1) 1:(B$i1-1),
+ if(B$i2 < n) (B$i2+1):n)] <- 1
+ checkScal(d = dB, A1 = A.perm, A2 = B$z)
+
+ ## return
+ list(P = P, S = S, B = B, Sz.eq.Bz = isTRUE(all.equal(S$z, B$z)))
+ }
> m4. <- rbind(c(-1,-2, 0, 0),
+ c( 0, 0,10,11),
+ c( 0, 0,12, 0),
+ c( 0,13, 0, 0))
> op <- options(str = strOptions(vec.len = 12))
> str(b4. <- balanceTst(m4.))
List of 4
$ P :List of 4
..$ z : num [1:4, 1:4] -1 0 0 0 -2 0 13 0 0 11 0 0 0 10 0 12
..$ scale: num [1:4] 1 1 1 3
..$ i1 : int 2
..$ i2 : int 3
$ S :List of 4
..$ z : num [1:4, 1:4] -1 0 0 0 -2 0 13 0 0 11 0 0 0 10 0 12
..$ scale: num [1:4] 1 1 1 1
..$ i1 : int 1
..$ i2 : int 4
$ B :List of 4
..$ z : num [1:4, 1:4] -1 0 0 0 -2 0 13 0 0 11 0 0 0 10 0 12
..$ scale: num [1:4] 1 1 1 3
..$ i1 : int 2
..$ i2 : int 3
$ Sz.eq.Bz: logi TRUE
> with(b4., all.equal(P, B)) # TRUE (everywhere?)
[1] TRUE
> ## better (?) example
> (m <- matrix(c(0,-1,0,-2,10, rep(0,11)), 4,4))
[,1] [,2] [,3] [,4]
[1,] 0 10 0 0
[2,] -1 0 0 0
[3,] 0 0 0 0
[4,] -2 0 0 0
> str(ba <- balanceTst(m))
List of 4
$ P :List of 4
..$ z : num [1:4, 1:4] 0 0 0 0 0 0 10 0 -2 -1 0 0 0 0 0 0
..$ scale: num [1:4] 3 1 1 3
..$ i1 : int 2
..$ i2 : int 3
$ S :List of 4
..$ z : num [1:4, 1:4] 0 0 0 0 0 0 2.5 0 -2 -4 0 0 0 0 0 0
..$ scale: num [1:4] 1 0.25 1 1
..$ i1 : int 1
..$ i2 : int 4
$ B :List of 4
..$ z : num [1:4, 1:4] 0 0 0 0 0 0 2.5 0 -2 -4 0 0 0 0 0 0
..$ scale: num [1:4] 3 0.25 1 3
..$ i1 : int 2
..$ i2 : int 3
$ Sz.eq.Bz: logi TRUE
> (eq <- with(ba, all.equal(S$z, B$z))) # TRUE now (everywhere?)
[1] TRUE
> ba$Sz.eq.Bz # ditto
[1] TRUE
> ## a non-empty ``less-balanced'' example ---
>
> m4 <- matrix(outer(2^(0:7),c(-1,1)), 4,4)
> m4[lower.tri(m4)] <- 0 #--> upper triangular ==> will have many permutations
> ## now permute it; so balance() will find the permutation
> p <- c(4,2:1,3); m4 <- m4[p,p]
> m4
[,1] [,2] [,3] [,4]
[1,] 128 0 0 0
[2,] 32 -32 0 2
[3,] 16 -16 -1 1
[4,] 64 0 0 4
> str(dm4 <- balanceTst(m4)) # much permutation! i1 = i2 = 1 !
List of 4
$ P :List of 4
..$ z : num [1:4, 1:4] -1 0 0 0 -16 -32 0 0 1 2 4 0 16 32 64 128
..$ scale: num [1:4] 1 2 1 1
..$ i1 : int 1
..$ i2 : int 1
$ S :List of 4
..$ z : num [1:4, 1:4] -1 0 0 0 -1 -32 0 0 0.25 8 4 0 1 32 16 128
..$ scale: num [1:4] 16 1 4 1
..$ i1 : int 1
..$ i2 : int 4
$ B :List of 4
..$ z : num [1:4, 1:4] -1 0 0 0 -16 -32 0 0 1 2 4 0 16 32 64 128
..$ scale: num [1:4] 1 2 1 1
..$ i1 : int 1
..$ i2 : int 1
$ Sz.eq.Bz: logi FALSE
> ##----------- Complex examples
> zba4 <- balanceTst(m4 + 3i * m4)
> str(zba4)
List of 4
$ P :List of 4
..$ z : cplx [1:4, 1:4] -1-3i 0+0i 0+0i 0+0i -16-48i -32-96i 0+0i 0+0i 1+3i ...
..$ scale: num [1:4] 1 2 1 1
..$ i1 : int 1
..$ i2 : int 1
$ S :List of 4
..$ z : cplx [1:4, 1:4] -1-3i 0+0i 0+0i 0+0i -1-3i -32-96i 0+0i 0+0i 0.25+0.75i ...
..$ scale: num [1:4] 16 1 4 1
..$ i1 : int 1
..$ i2 : int 4
$ B :List of 4
..$ z : cplx [1:4, 1:4] -1-3i 0+0i 0+0i 0+0i -16-48i -32-96i 0+0i 0+0i 1+3i ...
..$ scale: num [1:4] 1 2 1 1
..$ i1 : int 1
..$ i2 : int 1
$ Sz.eq.Bz: logi FALSE
> zba <- balanceTst(m*(1 + 1i))
> str(zba)
List of 4
$ P :List of 4
..$ z : cplx [1:4, 1:4] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 10+10i 0+0i -2-2i ...
..$ scale: num [1:4] 3 1 1 3
..$ i1 : int 2
..$ i2 : int 3
$ S :List of 4
..$ z : cplx [1:4, 1:4] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 2.5+2.5i 0+0i -2-2i ...
..$ scale: num [1:4] 1 0.25 1 1
..$ i1 : int 1
..$ i2 : int 4
$ B :List of 4
..$ z : cplx [1:4, 1:4] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 2.5+2.5i 0+0i -2-2i ...
..$ scale: num [1:4] 3 0.25 1 3
..$ i1 : int 2
..$ i2 : int 3
$ Sz.eq.Bz: logi TRUE
> stopifnot(exprs = {
+ all.equal(ba$ S$z, Re(zba$ S$z))
+ all.equal(ba$ S$z, Im(zba$ S$z))
+ all.equal(dm4$ S$z, Re(zba4$ S$z))
+ all.equal(dm4$ S$z * 3, Im(zba4$ S$z))
+ })
> options(op) # revert
> ## ==========
>
> dm4. <- dgebal(m4)
Warning message:
In dgebal(m4) :*** buffer overflow detected ***: terminated
Aborted
Flavor: r-devel-linux-x86_64-debian-gcc