Nothing
#'
#' Header for all (concatenated) test files
#'
#' Require spatstat.geom
#' Obtain environment variable controlling tests.
#'
#' $Revision: 1.5 $ $Date: 2020/04/30 05:31:37 $
require(spatstat.geom)
FULLTEST <- (nchar(Sys.getenv("SPATSTAT_TEST", unset="")) > 0)
ALWAYS <- TRUE
cat(paste("--------- Executing",
if(FULLTEST) "** ALL **" else "**RESTRICTED** subset of",
"test code -----------\n"))
##
## tests/segments.R
## Tests of psp class and related code
## [SEE ALSO: tests/xysegment.R]
##
## $Revision: 1.33 $ $Date: 2022/05/22 08:39:47 $
local({
if(ALWAYS) { # depends on platform
## pointed out by Jeff Laake
W <- owin()
X <- psp(x0=.25,x1=.25,y0=0,y1=1,window=W)
X[W]
}
X <- psp(runif(10),runif(10),runif(10),runif(10), window=owin())
if(FULLTEST) {
Z <- as.mask.psp(X)
Z <- pixellate(X)
}
if(ALWAYS) { # platform dependent
## add short segment
Shorty <- psp(0.5, 0.6, 0.5001, 0.6001, window=Window(X))
XX <- superimpose(X[1:5], Shorty, X[6:10])
ZZ <- as.mask.psp(XX)
ZZ <- pixellate(XX)
}
if(FULLTEST) {
#' misc
PX <- periodify(X, 2)
}
if(ALWAYS) { # C code
## tests of pixellate.psp -> seg2pixL
ns <- 50
out <- numeric(ns)
for(i in 1:ns) {
X <- psp(runif(1), runif(1), runif(1), runif(1), window=owin())
len <- lengths_psp(X)
dlen <- sum(pixellate(X)$v)
out[i] <- if(len > 1e-7) dlen/len else 1
}
if(diff(range(out)) > 0.01) stop(paste(
"pixellate.psp test 1: relative error [",
paste(diff(range(out)), collapse=", "),
"]"))
## Michael Sumner's test examples
set.seed(33)
n <- 2001
co <- cbind(runif(n), runif(n))
ow <- owin()
X <- psp(co[-n,1], co[-n,2], co[-1,1], co[-1,2], window=ow)
s1 <- sum(pixellate(X))
s2 <- sum(lengths_psp(X))
if(abs(s1 - s2)/s2 > 0.01) {
stop(paste("pixellate.psp test 2:",
"sum(pixellate(X)) = ", s1,
"!=", s2, "= sum(lengths_psp(X))"))
}
wts <- 1/(lengths_psp(X) * X$n)
s1 <- sum(pixellate(X, weights=wts))
if(abs(s1-1) > 0.01) {
stop(paste("pixellate.psp test 3:",
"sum(pixellate(X, weights))=", s1,
" (should be 1)"))
}
X <- psp(0, 0, 0.01, 0.001, window=owin())
s1 <- sum(pixellate(X))
s2 <- sum(lengths_psp(X))
if(abs(s1 - s2)/s2 > 0.01) {
stop(paste("pixellate.psp test 4:",
"sum(pixellate(X)) = ", s1,
"!=", s2, "= sum(lengths_psp(X))"))
}
X <- psp(0, 0, 0.001, 0.001, window=owin())
s1 <- sum(pixellate(X))
s2 <- sum(lengths_psp(X))
if(abs(s1 - s2)/s2 > 0.01) {
stop(paste("pixellate.psp test 5:",
"sum(pixellate(X)) = ", s1,
"!=", s2, "= sum(lengths_psp(X))"))
}
}
if(FULLTEST) {
#' cases of superimpose.psp
A <- as.psp(matrix(runif(40), 10, 4), window=owin())
B <- as.psp(matrix(runif(40), 10, 4), window=owin())
superimpose(A, B, W=ripras)
superimpose(A, B, W="convex")
}
if(FULLTEST) {
#' as.psp.data.frame
df <- as.data.frame(matrix(runif(40), ncol=4))
A <- as.psp(df, window=square(1))
colnames(df) <- c("x0","y0","x1","y1")
df <- cbind(df, data.frame(marks=1:nrow(df)))
B <- as.psp(df, window=square(1))
colnames(df) <- c("xmid", "ymid", "length", "angle", "marks")
E <- as.psp(df, window=square(c(-1,2)))
G <- E %mark% factor(sample(letters[1:3], nsegments(E), replace=TRUE))
H <- E %mark% runif(nsegments(E))
#' print and summary methods
A
B
E
G
H
summary(B)
summary(G)
summary(H)
M <- B
marks(M) <- data.frame(id=marks(B), len=lengths_psp(B))
M
summary(M)
subset(M, select=len)
#' plot method cases
spatstat.options(monochrome=TRUE)
plot(B)
plot(G)
plot(M)
spatstat.options(monochrome=FALSE)
plot(B)
plot(G)
plot(M)
#' misuse of 'col' argument - several cases
plot(G, col="grey") # discrete
plot(B, col="grey")
plot(unmark(B), col="grey")
plot(M, col="grey")
#' miscellaneous class support cases
marks(M) <- marks(M)[1,,drop=FALSE]
#' undocumented
as.ppp(B)
}
if(ALWAYS) { # C code
#' segment crossing code
X <- psp(runif(30),runif(30),runif(30),runif(30), window=owin())
A <- selfcut.psp(X, eps=1e-11)
B <- selfcut.psp(X[1])
#'
Y <- psp(runif(30),runif(30),runif(30),runif(30), window=owin())
Z <- edges(letterR)[c(FALSE,TRUE)]
spatstat.options(selfcrossing.psp.useCall=FALSE, crossing.psp.useCall=FALSE)
A <- selfcrossing.psp(X)
B <- selfcrossing.psp(Z)
D <- crossing.psp(X,Y,details=TRUE)
spatstat.options(selfcrossing.psp.useCall=TRUE, crossing.psp.useCall=TRUE)
A <- selfcrossing.psp(X)
B <- selfcrossing.psp(Z)
D <- crossing.psp(X,Y,details=TRUE)
reset.spatstat.options()
}
if(FULLTEST) {
#' geometry
m <- data.frame(A=1:10, B=letters[1:10])
X <- psp(runif(10), runif(10), runif(10), runif(10), window=owin(), marks=m)
Z <- rotate(X, angle=pi/3, centre=c(0.5, 0.5))
Y <- endpoints.psp(X, which="lower")
Y <- endpoints.psp(X, which="upper")
Y <- endpoints.psp(X, which="right")
U <- flipxy(X)
}
if(ALWAYS) {
## nnfun.psp
P <- psp(runif(10), runif(10), runif(10), runif(10),
window=square(1), marks=runif(10))
f <- nnfun(P)
f <- nnfun(P, value="mark")
d <- domain(f)
Z <- as.im(f)
}
})
reset.spatstat.options()
#'
#' tests/simplepan.R
#'
#' Tests of user interaction in simplepanel
#' Handled by spatstatLocator()
#'
#' $Revision: 1.3 $ $Date: 2020/05/01 09:59:59 $
#'
if(ALWAYS) { # may depend on platform
local({
## Adapted from example(simplepanel)
## make boxes
outerbox <- owin(c(0,4), c(0,1))
buttonboxes <- layout.boxes(outerbox, 4, horizontal=TRUE, aspect=1)
## make environment containing an integer count
myenv <- new.env()
assign("answer", 0, envir=myenv)
## what to do when finished: return the count.
myexit <- function(e) { return(get("answer", envir=e)) }
## button clicks
## decrement the count
Cminus <- function(e, xy) {
ans <- get("answer", envir=e)
assign("answer", ans - 1, envir=e)
return(TRUE)
}
## display the count (clicking does nothing)
Cvalue <- function(...) { TRUE }
## increment the count
Cplus <- function(e, xy) {
ans <- get("answer", envir=e)
assign("answer", ans + 1, envir=e)
return(TRUE)
}
## 'Clear' button
Cclear <- function(e, xy) {
assign("answer", 0, envir=e)
return(TRUE)
}
## quit button
Cdone <- function(e, xy) { return(FALSE) }
myclicks <- list("-"=Cminus,
value=Cvalue,
"+"=Cplus,
done=Cdone)
## redraw the button that displays the current value of the count
Rvalue <- function(button, nam, e) {
plot(button, add=TRUE)
ans <- get("answer", envir=e)
text(centroid.owin(button), labels=ans)
return(TRUE)
}
## make the panel
P <- simplepanel("Counter",
B=outerbox, boxes=buttonboxes,
clicks=myclicks,
redraws = list(NULL, Rvalue, NULL, NULL),
exit=myexit, env=myenv)
## queue up a sequence of inputs
boxcentres <- do.call(concatxy, unname(lapply(buttonboxes[c(3,3,1,3,2,4)],
centroid.owin)))
spatstat.utils::queueSpatstatLocator(boxcentres$x, boxcentres$y)
## go
run.simplepanel(P)
})
}
#
# tests/splitpea.R
#
# Check behaviour of split.ppp etc
#
# Thanks to Marcelino de la Cruz
#
# $Revision: 1.17 $ $Date: 2021/04/15 06:19:51 $
#
local({
W <- square(8)
X <- ppp(c(2.98, 4.58, 7.27, 1.61, 7.19),
c(7.56, 5.29, 5.03, 0.49, 1.65),
window=W, check=FALSE)
Z <- quadrats(W, 4, 4)
Yall <- split(X, Z, drop=FALSE)
Ydrop <- split(X, Z, drop=TRUE)
if(ALWAYS) { # may depend on platform
P <- Yall[[1]]
if(!all(inside.owin(P$x, P$y, P$window)))
stop("Black hole detected when drop=FALSE")
P <- Ydrop[[1]]
if(!all(inside.owin(P$x, P$y, P$window)))
stop("Black hole detected when drop=TRUE")
Ydrop[[1]] <- P[1]
split(X, Z, drop=TRUE) <- Ydrop
}
## test NA handling
Zbad <- quadrats(square(4), 2, 2)
Ybdrop <- split(X, Zbad, drop=TRUE)
Yball <- split(X, Zbad, drop=FALSE)
if(FULLTEST) {
## other bugs/ code blocks in split.ppp, split<-.ppp, [<-.splitppp
flog <- rep(c(TRUE,FALSE), 21)
fimg <- as.im(dirichlet(runifrect(5, Window(cells))), dimyx=32)
A <- split(cells, flog)
B <- split(cells, square(0.5))
D <- split(cells, fimg)
E <- split(cells, logical(42), drop=TRUE)
Cellules <- cells
split(Cellules, flog) <- solapply(A, rjitter)
split(Cellules, fimg) <- solapply(D, rjitter)
D[[2]] <- rjitter(D[[2]])
Funpines <- finpines
marks(Funpines)[,"diameter"] <- factor(marks(Funpines)[,"diameter"])
G <- split(Funpines)
H <- split(Funpines, "diameter")
split(Funpines) <- solapply(G, rjitter)
split(Funpines, "diameter") <- solapply(H, rjitter)
## From Marcelino
set.seed(1)
W<- square(10) # the big window
## puntos<- rpoispp(0.5, win=W)
puntos<- runifrect(rpois(1, 0.5 * area(W)), win=W)
r00 <- letterR
r05 <- shift(letterR,c(0,5))
r50 <- shift(letterR,c(5,0))
r55 <- shift(letterR,c(5,5))
tessr4 <- tess(tiles=list(r00, r05,r50,r55))
puntosr4 <- split(puntos, tessr4, drop=TRUE)
split(puntos, tessr4, drop=TRUE) <- puntosr4
## More headaches with mark format
A <- runifrect(10)
B <- runifrect(10)
AB <- split(superimpose(A=A, B=B))
#' check that split<- respects ordering where possible
X <- amacrine
Y <- split(X)
split(X) <- Y
stopifnot(identical(X, amacrine))
#' split.ppx
df <- data.frame(x=runif(4),y=runif(4),t=runif(4),
age=rep(c("old", "new"), 2),
mineral=factor(rep(c("Au","Cu"), each=2),
levels=c("Au", "Cu", "Pb")),
size=runif(4))
X <- ppx(data=df, coord.type=c("s","s","t","m", "m","m"))
Y <- split(X, "age")
Y <- split(X, "mineral", drop=TRUE)
Y <- split(X, "mineral")
print(Y)
print(summary(Y))
Y[c(TRUE,FALSE,TRUE)]
Y[1:2]
Y[3] <- Y[1]
}
})
##
## tests/symbolmaps.R
##
## Quirks associated with symbolmaps, etc.
##
## $Revision: 1.6 $ $Date: 2024/04/08 04:22:25 $
if(FULLTEST) {
local({
set.seed(100)
X <- runifrect(8)
## symbolmap for numeric values
g1 <- symbolmap(range=c(0,100), size=function(x) x/50)
invoke.symbolmap(g1, 50, x=numeric(0), y=numeric(0), add=TRUE)
plot(g1, labelmap=100)
## symbolmap for discrete categories
g2 <- symbolmap(inputs=letters[1:5], chars=1:5)
invoke.symbolmap(g2, "a", x=numeric(0), y=numeric(0), add=TRUE)
plot(g2)
## constant/trivial
a <- symbolmap(pch=16)
print(a)
plot(a)
symbolmapdomain(a)
b <- symbolmap()
print(b)
## graphical arguments with mixed types (function, constant)
f <- function(x) { ifelse(x %in% letters[1:3], "circles", "squares")}
g3 <- symbolmap(inputs=letters[1:5], size=0.7, shape=f)
invoke.symbolmap(g3, "a", x=numeric(0), y=numeric(0), add=TRUE)
plot(g3)
## textureplot
V <- as.im(dirichlet(X))
tmap <- textureplot(V)
textureplot(V, textures=tmap, legend=TRUE, leg.side="left")
textureplot(V, leg.side="bottom")
textureplot(V, leg.side="top")
## spacing too large for tiles - upsets various pieces of code
textureplot(V, spacing=2)
## plot.texturemap
plot(tmap, vertical=TRUE)
plot(tmap, vertical=TRUE, xlim=c(0,1))
plot(tmap, vertical=TRUE, ylim=c(0,1))
plot(tmap, vertical=FALSE, xlim=c(0,1))
plot(tmap, vertical=FALSE, ylim=c(0,1))
## infrastructure
plan.legend.layout(owin(), side="top", started=TRUE)
})
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.