# SCM Repository

[matrix] Annotation of /pkg/tests/indexing.R
 [matrix] / pkg / tests / indexing.R

# Annotation of /pkg/tests/indexing.R

Revision 1575 - (view) (download)

 1 : maechler 687 #### For both 'Extract' ("[") and 'Replace' ("[<-") Method testing 2 : 3 : library(Matrix) 4 : 5 : maechler 907 source(system.file("test-tools.R", package = "Matrix"))# identical3() etc 6 : maechler 687 7 : maechler 873 ### Dense Matrices 8 : 9 : maechler 687 m <- Matrix(1:28, nrow = 7) 10 : maechler 873 validObject(m) ; m@x <- as.double(m@x) ; validObject(m) 11 : stopifnot(identical(m, m[]), 12 : identical(m[2, 3], 16), # simple number 13 : identical(m[2, 3:4], c(16,23))) # simple numeric of length 2 14 : maechler 687 15 : maechler 873 m[2, 3:4, drop=FALSE] # sub matrix of class 'dgeMatrix' 16 : m[-(4:7), 3:4] # dito; the upper right corner of 'm' 17 : maechler 687 18 : maechler 873 ## rows or columns only: 19 : m[1,] # first row, as simple numeric vector 20 : m[,2] # 2nd column 21 : m[,1:2] # sub matrix of first two columns 22 : m[-(1:6),, drop=FALSE] # not the first 6 rows, i.e. only the 7th 23 : maechler 1331 m[integer(0),] #-> 0 x 4 Matrix 24 : m[2:4, numeric(0)] #-> 3 x 0 Matrix 25 : maechler 687 26 : maechler 873 ## logical indexing 27 : stopifnot(identical(m[2,3], m[(1:nrow(m)) == 2, (1:ncol(m)) == 3]), 28 : identical(m[2,], m[(1:nrow(m)) == 2, ]), 29 : identical(m[,3:4], m[, (1:4) >= 3])) 30 : 31 : maechler 886 ## dimnames indexing: 32 : mn <- m 33 : dimnames(mn) <- list(paste("r",letters[1:nrow(mn)],sep=""), 34 : LETTERS[1:ncol(mn)]) 35 : mn["rd", "D"] 36 : maechler 1226 stopifnot(identical(mn["rc", "D"], mn[3,4]), mn[3,4] == 24, 37 : identical(mn[, "A"], mn[,1]), mn[,1] == 1:7, 38 : maechler 886 identical(mn[c("re", "rb"), "B"], mn[c(5,2), 2]) 39 : ) 40 : maechler 873 41 : maechler 886 mo <- m 42 : m[2,3] <- 100 43 : m[1:2, 4] <- 200 44 : m[, 1] <- -1 45 : m[1:3,] 46 : 47 : maechler 1226 g10 <- m [ m > 10 ] 48 : stopifnot(18 == length(g10)) 49 : maechler 1362 stopifnot(10 == length(m[ m <= 10 ])) 50 : maechler 1575 sel <- (20 < m) & (m < 150) 51 : (ssel <- as(sel, "sparseMatrix")) 52 : stopifnot(is(sel, "lMatrix"), is(ssel, "lsparseMatrix"), 53 : identical( m[ ssel], as.matrix(m)[as.matrix( ssel)]), 54 : identical( m[!ssel], as.matrix(m)[as.matrix(!ssel)]) 55 : ) 56 : maechler 873 57 : maechler 1575 ## more sparse Matrices -------------------------------------- 58 : maechler 873 59 : maechler 687 m <- 1:800 60 : set.seed(101) ; m[sample(800, 600)] <- 0 61 : m <- Matrix(m, nrow = 40) 62 : mm <- as(m, "matrix") 63 : dimnames(mm) <- NULL ## << workaround: as(, "matrix") has NULL dimnames 64 : str(mC <- as(m, "dgCMatrix")) 65 : str(mT <- as(m, "dgTMatrix")) 66 : stopifnot(identical(mT, as(mC, "dgTMatrix")), 67 : identical(mC, as(mT, "dgCMatrix"))) 68 : 69 : mC[,1] 70 : mC[1:2,] 71 : maechler 925 mC[7, drop = FALSE] 72 : maechler 1226 assert.EQ.mat(mC[1:2,], mm[1:2,]) 73 : stopifnot(all.equal(mC[,3], mm[,3])) 74 : assert.EQ.mat(mC[7, , drop=FALSE], mm[7, , drop=FALSE]) 75 : 76 : maechler 1331 stopifnot(dim(mC[numeric(0), ]) == c(0,20), # used to give warnings 77 : dim(mC[, integer(0)]) == c(40,0), 78 : identical(mC[, integer(0)], mC[, FALSE]), 79 : identical(mC[7, drop = FALSE], 80 : maechler 925 mC[7,, drop = FALSE])) 81 : maechler 1269 validObject(print(mT[,c(2,4)])) 82 : stopifnot(all.equal(mT[2,], mm[2,]), 83 : ## row or column indexing in combination with t() : 84 : identical(mT[2,], t(mT)[,2]), 85 : identical(mT[-2,], t(t(mT)[,-2])), 86 : identical(mT[c(2,5),], t(t(mT)[,c(2,5)])) 87 : ) 88 : maechler 1226 assert.EQ.mat(mT[4,, drop = FALSE], mm[4,, drop = FALSE]) 89 : maechler 687 stopifnot(identical3(mm[,1], mC[,1], mT[,1]), 90 : identical3(mm[3,], mC[3,], mT[3,]), 91 : identical3(mT[2,3], mC[2,3], 0), 92 : identical(mT[], mT), 93 : maechler 925 ## TODO: identical4() with m[c(3,7), 2:4] - fail because of 'dimnames' 94 : maechler 1374 ## TODO: identical3() with as(mC[c(3,7), 2:4],"matrix"), 95 : bates 1367 ## fails because of 'dimnames' 96 : identical(mm[c(3,7), 2:4], as(mT[c(3,7), 2:4],"matrix")) 97 : ) 98 : maechler 687 99 : maechler 1331 x.x <- crossprod(mC) 100 : stopifnot(class(x.x) == "dsCMatrix", 101 : class(x.x. <- round(x.x / 10000)) == "dsCMatrix") 102 : head(x.x.) # Note the *non*-structural 0's printed as "0" 103 : maechler 1575 tail(x.x., -3) # all but the first three lines 104 : maechler 1331 105 : lx.x <- as(x.x, "lsCMatrix") # FALSE only for "structural" 0 106 : if(FALSE) { ## FIXME: needs coercion "lsCMatrix" to "lgTMatrix" 107 : lx.x[1:10, 1:10] 108 : lx.x[1:3, ] 109 : } 110 : 111 : maechler 925 ## --- negative indices ---------- 112 : mc <- mC[1:5, 1:7] 113 : mt <- mT[1:5, 1:7] 114 : ## sub matrix 115 : maechler 1226 assert.EQ.mat(mC[1:2, 0:3], mm[1:2, 0:3]) # test 0-index 116 : maechler 925 stopifnot(identical(mc[-(3:5), 0:2], mC[1:2, 0:2]), 117 : maechler 1226 identical(mt[-(3:5), 0:2], mT[1:2, 0:2]), 118 : identical(mC[2:3, 4], mm[2:3, 4])) 119 : assert.EQ.mat(mC[1:2,], mm[1:2,]) 120 : maechler 925 ## sub vector 121 : stopifnot(identical4(mc[-(1:4), ], mC[5, 1:7], 122 : mt[-(1:4), ], mT[5, 1:7])) 123 : stopifnot(identical4(mc[-(1:4), -(2:4)], mC[5, c(1,5:7)], 124 : mt[-(1:4), -(2:4)], mT[5, c(1,5:7)])) 125 : 126 : ## mixing of negative and positive must give error 127 : assertError(mT[-1:1,]) 128 : 129 : maechler 1226 ## Sub *Assignment* ---- now works (partially): 130 : mt0 <- mt 131 : mt[1, 4] <- -99 132 : mt[2:3, 1:6] <- 0 133 : mt 134 : m2 <- mt+mt 135 : m2[1,4] <- -200 136 : m2[c(1,3), c(5:6,2)] <- 1:6 137 : stopifnot(m2[1,4] == -200, 138 : as.vector(m2[c(1,3), c(5:6,2)]) == 1:6) 139 : mt[,3] <- 30 140 : mt[2:3,] <- 250 141 : mt[1:5 %% 2 == 1, 3] <- 0 142 : mt[3:1, 1:7 > 5] <- 0 143 : mt 144 : maechler 1215 145 : maechler 1226 tt <- as(mt,"matrix") 146 : ii <- c(0,2,5) 147 : jj <- c(2:3,5) 148 : tt[ii, jj] <- 1:6 # 0 is just "dropped" 149 : mt[ii, jj] <- 1:6 150 : assert.EQ.mat(mt, tt) 151 : maechler 1215 152 : maechler 1226 mt[1:5, 2:6] 153 : as((mt0 - mt)[1:5,], "dsparseMatrix")# [1,5] and lines 2:3 154 : 155 : maechler 1315 mt[c(2,4), ] <- 0; stopifnot(as(mt[c(2,4), ],"matrix") == 0) 156 : maechler 1226 mt[2:3, 4:7] <- 33 157 : validObject(mt) 158 : mt 159 : 160 : maechler 1315 mc[1,4] <- -99 ; stopifnot(mc[1,4] == -99) 161 : mc[1,4] <- 00 ; stopifnot(mc[1,4] == 00) 162 : mc[1,4] <- -99 ; stopifnot(mc[1,4] == -99) 163 : mc[1:2,4:3] <- 4:1; stopifnot(as.matrix(mc[1:2,4:3]) == 4:1) 164 : 165 : maechler 1226 mc[-1, 3] <- -2:1 # 0 should not be entered; 'value' recycled 166 : mt[-1, 3] <- -2:1 167 : maechler 1315 stopifnot(mc@x != 0, mt@x != 0, 168 : mc[-1,3] == -2:1, mt[-1,3] == -2:1) ##--> BUG -- fixed 169 : 170 : ev <- 1:5 %% 2 == 0 171 : mc[ev, 3] <- 0:1 172 : maechler 1374 if(FALSE)## FIXME 173 : stopifnot(mc[ev, 3] == 0:1) ##-> BUG {very peculiar; the 2nd time it works ...} 174 : maechler 1226 validObject(mc) 175 : maechler 1315 mc # now shows a non-structural zeros 176 : maechler 1226 mc[ii, jj] <- 1:6 177 : mc[c(2,5), c(3,5)] <- 3.2 178 : validObject(mc) 179 : maechler 1315 (m. <- mc) 180 : maechler 1374 if(FALSE)## FIXME: 181 : mc[4,] <- 0 # -> error -- another Bug 182 : maechler 1226 183 : maechler 1331 H <- Hilbert(9) 184 : maechler 1374 Hc <- as(round(H, 3), "dsCMatrix")# a sparse matrix with no 0 ... 185 : (trH <- tril(Hc[1:5, 1:5])) 186 : stopifnot(is(trH, "triangularMatrix"), trH@uplo == "L") 187 : maechler 1331 188 : maechler 1374 i <- c(1:2, 4, 6:7); j <- c(2:4,6) 189 : H[i,j] <- 0 190 : maechler 1331 (H. <- round(as(H, "sparseMatrix"), 3)[ , 2:7]) 191 : Hc. <- Hc 192 : maechler 1374 Hc.[i,j] <- 0 ## now "works", but setting "non-structural" 0s 193 : stopifnot(as.matrix(Hc.[i,j]) == 0) 194 : maechler 1331 Hc.[, 1:6] 195 : 196 : maechler 1226 cat('Time elapsed: ', proc.time(),'\n') # for ``statistical reasons''

 root@r-forge.r-project.org ViewVC Help Powered by ViewVC 1.0.0
Thanks to: