Last updated on 2020-02-19 10:48:54 CET.
Flavor | Version | Tinstall | Tcheck | Ttotal | Status | Flags |
---|---|---|---|---|---|---|
r-devel-linux-x86_64-debian-clang | 0.1.1 | 53.44 | 218.87 | 272.31 | ERROR | |
r-devel-linux-x86_64-debian-gcc | 0.1.1 | 38.35 | 164.63 | 202.98 | ERROR | |
r-devel-linux-x86_64-fedora-clang | 0.1.1 | 327.44 | ERROR | |||
r-devel-linux-x86_64-fedora-gcc | 0.1.1 | 316.57 | ERROR | |||
r-devel-windows-ix86+x86_64 | 0.1.1 | 102.00 | 303.00 | 405.00 | OK | |
r-devel-windows-ix86+x86_64-gcc8 | 0.1.1 | 143.00 | 405.00 | 548.00 | OK | |
r-patched-linux-x86_64 | 0.1.1 | 43.16 | 182.83 | 225.99 | OK | |
r-patched-solaris-x86 | 0.1.1 | 391.50 | OK | |||
r-release-linux-x86_64 | 0.1.1 | 39.77 | 181.38 | 221.15 | OK | |
r-release-windows-ix86+x86_64 | 0.1.1 | 102.00 | 275.00 | 377.00 | OK | |
r-release-osx-x86_64 | 0.1.1 | OK | ||||
r-oldrel-windows-ix86+x86_64 | 0.1.1 | 98.00 | 258.00 | 356.00 | ERROR | |
r-oldrel-osx-x86_64 | 0.1.1 | ERROR |
Version: 0.1.1
Check: tests
Result: ERROR
Running 'testthat.R' [30s/32s]
Running the tests in 'tests/testthat.R' failed.
Complete output:
> library(testthat)
> library(checkmate)
> library(raster)
Loading required package: sp
> library(sp)
> library(sf)
Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.0
>
> test_check("geometr")
Loading required package: geometr
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(template$obj)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
--- R stacktrace ---
where 1: visualise(template$obj)
where 2 at testthat/test_gt_sketch.R#15: gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
where 3: eval(code, test_env)
where 4: eval(code, test_env)
where 5: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 6: doTryCatch(return(expr), name, parentenv, handler)
where 7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 8: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 9: doTryCatch(return(expr), name, parentenv, handler)
where 10: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 11: tryCatchList(expr, classes, parentenv, handlers)
where 12: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 13: test_code(desc, code, env = parent.frame())
where 14 at testthat/test_gt_sketch.R#14: test_that("sketch a point geometry from a matrix", {
output <- gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
expect_class(x = output, classes = "geom")
expect_true(object = output@type == "point")
})
where 15: eval(code, test_env)
where 16: eval(code, test_env)
where 17: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 18: doTryCatch(return(expr), name, parentenv, handler)
where 19: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 20: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 21: doTryCatch(return(expr), name, parentenv, handler)
where 22: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 23: tryCatchList(expr, classes, parentenv, handlers)
where 24: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 25: test_code(NULL, exprs, env)
where 26: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 27: force(code)
where 28: doWithOneRestart(return(expr), restart)
where 29: withOneRestart(expr, restarts[[1L]])
where 30: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 31: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 32: FUN(X[[i]], ...)
where 33: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 34: force(code)
where 35: doWithOneRestart(return(expr), restart)
where 36: withOneRestart(expr, restarts[[1L]])
where 37: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 38: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 39: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 40: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 41: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 42: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x11c23868>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
-- 1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15) -----
the condition has length > 1
Backtrace:
1. geometr::gt_sketch(...)
2. geometr::visualise(template$obj)
Reading layer `nc' from data source `/home/hornik/tmp/R.check/r-devel-clang/Work/build/Packages/sf/shape/nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID): 4267
proj4string: +proj=longlat +datum=NAD27 +no_defs
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(`my matrix` = aMatrix)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
} else {
theName <- names(objs)[i]
}
--- R stacktrace ---
where 1 at testthat/test_visualise.R#21: visualise(`my matrix` = aMatrix)
where 2: eval(code, test_env)
where 3: eval(code, test_env)
where 4: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 5: doTryCatch(return(expr), name, parentenv, handler)
where 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 7: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 8: doTryCatch(return(expr), name, parentenv, handler)
where 9: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 10: tryCatchList(expr, classes, parentenv, handlers)
where 11: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 12: test_code(desc, code, env = parent.frame())
where 13 at testthat/test_visualise.R#18: test_that("visualise a matrix", {
aMatrix <<- raster::as.matrix(gtRasters$continuous)
output <- visualise(`my matrix` = aMatrix)
expect_class(output, "recordedplot")
})
where 14: eval(code, test_env)
where 15: eval(code, test_env)
where 16: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 17: doTryCatch(return(expr), name, parentenv, handler)
where 18: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 19: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 20: doTryCatch(return(expr), name, parentenv, handler)
where 21: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 22: tryCatchList(expr, classes, parentenv, handlers)
where 23: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 24: test_code(NULL, exprs, env)
where 25: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 26: force(code)
where 27: doWithOneRestart(return(expr), restart)
where 28: withOneRestart(expr, restarts[[1L]])
where 29: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 30: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 31: FUN(X[[i]], ...)
where 32: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 33: force(code)
where 34: doWithOneRestart(return(expr), restart)
where 35: withOneRestart(expr, restarts[[1L]])
where 36: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 37: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 38: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 39: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 40: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 41: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x11c23868>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
-- 2. Error: visualise a matrix (@test_visualise.R#21) ------------------------
the condition has length > 1
Backtrace:
1. geometr::visualise(`my matrix` = aMatrix)
== testthat results ===========================================================
[ OK: 693 | SKIPPED: 0 | WARNINGS: 8 | FAILED: 2 ]
1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15)
2. Error: visualise a matrix (@test_visualise.R#21)
Error: testthat unit tests failed
Execution halted
Flavor: r-devel-linux-x86_64-debian-clang
Version: 0.1.1
Check: tests
Result: ERROR
Running ‘testthat.R’ [22s/32s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
> library(testthat)
> library(checkmate)
> library(raster)
Loading required package: sp
> library(sp)
> library(sf)
Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.0
>
> test_check("geometr")
Loading required package: geometr
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(template$obj)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
--- R stacktrace ---
where 1: visualise(template$obj)
where 2 at testthat/test_gt_sketch.R#15: gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
where 3: eval(code, test_env)
where 4: eval(code, test_env)
where 5: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 6: doTryCatch(return(expr), name, parentenv, handler)
where 7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 8: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 9: doTryCatch(return(expr), name, parentenv, handler)
where 10: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 11: tryCatchList(expr, classes, parentenv, handlers)
where 12: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 13: test_code(desc, code, env = parent.frame())
where 14 at testthat/test_gt_sketch.R#14: test_that("sketch a point geometry from a matrix", {
output <- gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
expect_class(x = output, classes = "geom")
expect_true(object = output@type == "point")
})
where 15: eval(code, test_env)
where 16: eval(code, test_env)
where 17: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 18: doTryCatch(return(expr), name, parentenv, handler)
where 19: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 20: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 21: doTryCatch(return(expr), name, parentenv, handler)
where 22: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 23: tryCatchList(expr, classes, parentenv, handlers)
where 24: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 25: test_code(NULL, exprs, env)
where 26: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 27: force(code)
where 28: doWithOneRestart(return(expr), restart)
where 29: withOneRestart(expr, restarts[[1L]])
where 30: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 31: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 32: FUN(X[[i]], ...)
where 33: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 34: force(code)
where 35: doWithOneRestart(return(expr), restart)
where 36: withOneRestart(expr, restarts[[1L]])
where 37: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 38: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 39: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 40: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 41: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 42: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x55a05b56ae70>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
── 1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15) ─────
the condition has length > 1
Backtrace:
1. geometr::gt_sketch(...)
2. geometr::visualise(template$obj)
Reading layer `nc' from data source `/home/hornik/tmp/R.check/r-devel-gcc/Work/build/Packages/sf/shape/nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID): 4267
proj4string: +proj=longlat +datum=NAD27 +no_defs
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(`my matrix` = aMatrix)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
} else {
theName <- names(objs)[i]
}
--- R stacktrace ---
where 1 at testthat/test_visualise.R#21: visualise(`my matrix` = aMatrix)
where 2: eval(code, test_env)
where 3: eval(code, test_env)
where 4: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 5: doTryCatch(return(expr), name, parentenv, handler)
where 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 7: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 8: doTryCatch(return(expr), name, parentenv, handler)
where 9: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 10: tryCatchList(expr, classes, parentenv, handlers)
where 11: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 12: test_code(desc, code, env = parent.frame())
where 13 at testthat/test_visualise.R#18: test_that("visualise a matrix", {
aMatrix <<- raster::as.matrix(gtRasters$continuous)
output <- visualise(`my matrix` = aMatrix)
expect_class(output, "recordedplot")
})
where 14: eval(code, test_env)
where 15: eval(code, test_env)
where 16: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 17: doTryCatch(return(expr), name, parentenv, handler)
where 18: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 19: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 20: doTryCatch(return(expr), name, parentenv, handler)
where 21: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 22: tryCatchList(expr, classes, parentenv, handlers)
where 23: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 24: test_code(NULL, exprs, env)
where 25: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 26: force(code)
where 27: doWithOneRestart(return(expr), restart)
where 28: withOneRestart(expr, restarts[[1L]])
where 29: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 30: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 31: FUN(X[[i]], ...)
where 32: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 33: force(code)
where 34: doWithOneRestart(return(expr), restart)
where 35: withOneRestart(expr, restarts[[1L]])
where 36: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 37: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 38: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 39: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 40: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 41: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x55a05b56ae70>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
── 2. Error: visualise a matrix (@test_visualise.R#21) ────────────────────────
the condition has length > 1
Backtrace:
1. geometr::visualise(`my matrix` = aMatrix)
══ testthat results ═══════════════════════════════════════════════════════════
[ OK: 693 | SKIPPED: 0 | WARNINGS: 8 | FAILED: 2 ]
1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15)
2. Error: visualise a matrix (@test_visualise.R#21)
Error: testthat unit tests failed
Execution halted
Flavor: r-devel-linux-x86_64-debian-gcc
Version: 0.1.1
Check: tests
Result: ERROR
Running ‘testthat.R’ [34s/37s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
> library(testthat)
> library(checkmate)
> library(raster)
Loading required package: sp
> library(sp)
> library(sf)
Linking to GEOS 3.7.1, GDAL 2.3.2, PROJ 5.2.0
>
> test_check("geometr")
Loading required package: geometr
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(template$obj)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
--- R stacktrace ---
where 1: visualise(template$obj)
where 2 at testthat/test_gt_sketch.R#15: gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
where 3: eval(code, test_env)
where 4: eval(code, test_env)
where 5: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 6: doTryCatch(return(expr), name, parentenv, handler)
where 7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 8: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 9: doTryCatch(return(expr), name, parentenv, handler)
where 10: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 11: tryCatchList(expr, classes, parentenv, handlers)
where 12: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 13: test_code(desc, code, env = parent.frame())
where 14 at testthat/test_gt_sketch.R#14: test_that("sketch a point geometry from a matrix", {
output <- gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
expect_class(x = output, classes = "geom")
expect_true(object = output@type == "point")
})
where 15: eval(code, test_env)
where 16: eval(code, test_env)
where 17: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 18: doTryCatch(return(expr), name, parentenv, handler)
where 19: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 20: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 21: doTryCatch(return(expr), name, parentenv, handler)
where 22: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 23: tryCatchList(expr, classes, parentenv, handlers)
where 24: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 25: test_code(NULL, exprs, env)
where 26: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 27: force(code)
where 28: doWithOneRestart(return(expr), restart)
where 29: withOneRestart(expr, restarts[[1L]])
where 30: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 31: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 32: FUN(X[[i]], ...)
where 33: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 34: force(code)
where 35: doWithOneRestart(return(expr), restart)
where 36: withOneRestart(expr, restarts[[1L]])
where 37: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 38: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 39: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 40: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 41: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 42: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x11eff168>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
── 1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15) ─────
the condition has length > 1
Backtrace:
1. geometr::gt_sketch(...)
2. geometr::visualise(template$obj)
Reading layer `nc' from data source `/data/gannet/ripley/R/test-clang/sf/shape/nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID): 4267
proj4string: +proj=longlat +datum=NAD27 +no_defs
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(`my matrix` = aMatrix)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
} else {
theName <- names(objs)[i]
}
--- R stacktrace ---
where 1 at testthat/test_visualise.R#21: visualise(`my matrix` = aMatrix)
where 2: eval(code, test_env)
where 3: eval(code, test_env)
where 4: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 5: doTryCatch(return(expr), name, parentenv, handler)
where 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 7: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 8: doTryCatch(return(expr), name, parentenv, handler)
where 9: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 10: tryCatchList(expr, classes, parentenv, handlers)
where 11: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 12: test_code(desc, code, env = parent.frame())
where 13 at testthat/test_visualise.R#18: test_that("visualise a matrix", {
aMatrix <<- raster::as.matrix(gtRasters$continuous)
output <- visualise(`my matrix` = aMatrix)
expect_class(output, "recordedplot")
})
where 14: eval(code, test_env)
where 15: eval(code, test_env)
where 16: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 17: doTryCatch(return(expr), name, parentenv, handler)
where 18: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 19: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 20: doTryCatch(return(expr), name, parentenv, handler)
where 21: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 22: tryCatchList(expr, classes, parentenv, handlers)
where 23: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 24: test_code(NULL, exprs, env)
where 25: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 26: force(code)
where 27: doWithOneRestart(return(expr), restart)
where 28: withOneRestart(expr, restarts[[1L]])
where 29: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 30: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 31: FUN(X[[i]], ...)
where 32: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 33: force(code)
where 34: doWithOneRestart(return(expr), restart)
where 35: withOneRestart(expr, restarts[[1L]])
where 36: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 37: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 38: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 39: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 40: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 41: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x11eff168>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
── 2. Error: visualise a matrix (@test_visualise.R#21) ────────────────────────
the condition has length > 1
Backtrace:
1. geometr::visualise(`my matrix` = aMatrix)
══ testthat results ═══════════════════════════════════════════════════════════
[ OK: 693 | SKIPPED: 0 | WARNINGS: 8 | FAILED: 2 ]
1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15)
2. Error: visualise a matrix (@test_visualise.R#21)
Error: testthat unit tests failed
Execution halted
Flavor: r-devel-linux-x86_64-fedora-clang
Version: 0.1.1
Check: tests
Result: ERROR
Running ‘testthat.R’ [31s/33s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
> library(testthat)
> library(checkmate)
> library(raster)
Loading required package: sp
> library(sp)
> library(sf)
Linking to GEOS 3.7.1, GDAL 2.3.2, PROJ 5.2.0
>
> test_check("geometr")
Loading required package: geometr
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(template$obj)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
--- R stacktrace ---
where 1: visualise(template$obj)
where 2 at testthat/test_gt_sketch.R#15: gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
where 3: eval(code, test_env)
where 4: eval(code, test_env)
where 5: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 6: doTryCatch(return(expr), name, parentenv, handler)
where 7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 8: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 9: doTryCatch(return(expr), name, parentenv, handler)
where 10: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 11: tryCatchList(expr, classes, parentenv, handlers)
where 12: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 13: test_code(desc, code, env = parent.frame())
where 14 at testthat/test_gt_sketch.R#14: test_that("sketch a point geometry from a matrix", {
output <- gt_sketch(template = raster::as.matrix(gtRasters$categorical),
shape = "point")
expect_class(x = output, classes = "geom")
expect_true(object = output@type == "point")
})
where 15: eval(code, test_env)
where 16: eval(code, test_env)
where 17: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 18: doTryCatch(return(expr), name, parentenv, handler)
where 19: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 20: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 21: doTryCatch(return(expr), name, parentenv, handler)
where 22: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 23: tryCatchList(expr, classes, parentenv, handlers)
where 24: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 25: test_code(NULL, exprs, env)
where 26: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 27: force(code)
where 28: doWithOneRestart(return(expr), restart)
where 29: withOneRestart(expr, restarts[[1L]])
where 30: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 31: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 32: FUN(X[[i]], ...)
where 33: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 34: force(code)
where 35: doWithOneRestart(return(expr), restart)
where 36: withOneRestart(expr, restarts[[1L]])
where 37: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 38: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 39: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 40: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 41: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 42: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x12b1f970>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
── 1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15) ─────
the condition has length > 1
Backtrace:
1. geometr::gt_sketch(...)
2. geometr::visualise(template$obj)
Reading layer `nc' from data source `/data/gannet/ripley/R/test-4.0/sf/shape/nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID): 4267
proj4string: +proj=longlat +datum=NAD27 +no_defs
----------- FAILURE REPORT --------------
--- failure: the condition has length > 1 ---
--- srcref ---
:
--- package (from environment) ---
geometr
--- call from context ---
visualise(`my matrix` = aMatrix)
--- call from argument ---
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
} else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
} else {
theName <- names(objs)[i]
}
--- R stacktrace ---
where 1 at testthat/test_visualise.R#21: visualise(`my matrix` = aMatrix)
where 2: eval(code, test_env)
where 3: eval(code, test_env)
where 4: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 5: doTryCatch(return(expr), name, parentenv, handler)
where 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 7: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 8: doTryCatch(return(expr), name, parentenv, handler)
where 9: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 10: tryCatchList(expr, classes, parentenv, handlers)
where 11: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 12: test_code(desc, code, env = parent.frame())
where 13 at testthat/test_visualise.R#18: test_that("visualise a matrix", {
aMatrix <<- raster::as.matrix(gtRasters$continuous)
output <- visualise(`my matrix` = aMatrix)
expect_class(output, "recordedplot")
})
where 14: eval(code, test_env)
where 15: eval(code, test_env)
where 16: withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error)
where 17: doTryCatch(return(expr), name, parentenv, handler)
where 18: tryCatchOne(expr, names, parentenv, handlers[[1L]])
where 19: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
where 20: doTryCatch(return(expr), name, parentenv, handler)
where 21: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
where 22: tryCatchList(expr, classes, parentenv, handlers)
where 23: tryCatch(withCallingHandlers({
eval(code, test_env)
if (!handled && !is.null(test)) {
skip_empty()
}
}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,
message = handle_message, error = handle_error), error = handle_fatal,
skip = function(e) {
})
where 24: test_code(NULL, exprs, env)
where 25: source_file(path, new.env(parent = env), chdir = TRUE, wrap = wrap)
where 26: force(code)
where 27: doWithOneRestart(return(expr), restart)
where 28: withOneRestart(expr, restarts[[1L]])
where 29: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 30: with_reporter(reporter = reporter, start_end_reporter = start_end_reporter,
{
reporter$start_file(basename(path))
lister$start_file(basename(path))
source_file(path, new.env(parent = env), chdir = TRUE,
wrap = wrap)
reporter$.end_context()
reporter$end_file()
})
where 31: FUN(X[[i]], ...)
where 32: lapply(paths, test_file, env = env, reporter = current_reporter,
start_end_reporter = FALSE, load_helpers = FALSE, wrap = wrap)
where 33: force(code)
where 34: doWithOneRestart(return(expr), restart)
where 35: withOneRestart(expr, restarts[[1L]])
where 36: withRestarts(testthat_abort_reporter = function() NULL, force(code))
where 37: with_reporter(reporter = current_reporter, results <- lapply(paths,
test_file, env = env, reporter = current_reporter, start_end_reporter = FALSE,
load_helpers = FALSE, wrap = wrap))
where 38: test_files(paths, reporter = reporter, env = env, stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 39: test_dir(path = test_path, reporter = reporter, env = env, filter = filter,
..., stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,
wrap = wrap)
where 40: test_package_dir(package = package, test_path = test_path, filter = filter,
reporter = reporter, ..., stop_on_failure = stop_on_failure,
stop_on_warning = stop_on_warning, wrap = wrap)
where 41: test_check("geometr")
--- value of length: 2 type: logical ---
[1] FALSE FALSE
--- function from context ---
function (..., window = NULL, theme = gtTheme, trace = FALSE,
image = FALSE, new = TRUE, clip = TRUE)
{
window <- .testWindow(x = window, ...)
assertDataFrame(x = window, nrows = 5, min.cols = 2, null.ok = TRUE)
assertClass(x = theme, classes = "gtTheme", null.ok = TRUE)
assertLogical(x = trace, len = 1, any.missing = FALSE)
assertLogical(x = image, len = 1, any.missing = FALSE)
assertLogical(x = new, len = 1, any.missing = FALSE)
assertLogical(x = clip, len = 1, any.missing = FALSE)
objs <- rlang::enquos(...)
names <- NULL
objects <- list()
for (i in seq_along(objs)) {
theObject <- theName <- NULL
if (is.null(names(objs)[i]) || names(objs)[i] == "") {
theObject <- eval_tidy(expr = objs[[i]])
if (is.null(names(theObject))) {
theName <- NA
}
else if (image) {
theName <- "an image"
}
else {
theName <- names(theObject)
}
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
temp <- lapply(1:dim(theObject)[3], function(x) {
theObject[[x]]
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
}
}
else {
if (!names(objs)[i] %in% names(theme@vector)) {
theObject <- eval_tidy(expr = objs[[i]])
if ((class(theObject) == "RasterBrick" | class(theObject) ==
"RasterStack") & !image) {
theName <- paste(names(objs)[i], 1:dim(theObject)[3])
temp <- lapply(1:dim(theObject)[3], function(x) {
t <- theObject[[x]]
if (length(theObject@history) != 0) {
t@history <- theObject@history
}
return(t)
})
theObject <- temp
}
else if (class(theObject) == "matrix") {
theObject <- list(theObject)
theName <- "a matrix"
}
else {
theName <- names(objs)[i]
}
}
}
objects <- c(objects, theObject)
names <- c(names, theName)
}
if (!is.null(dev.list()) & !new) {
objViewports <- grid.ls(viewports = TRUE, grobs = FALSE,
print = FALSE)
newPlot <- ifelse(any(objViewports$name == "geometr"),
FALSE, TRUE)
panelNames <- objViewports$name[objViewports$vpDepth ==
2 & objViewports$name != "1"]
panelNames <- panelNames[!duplicated(panelNames)]
panels <- length(panelNames)
}
else {
newPlot <- TRUE
panels <- length(objects)
}
objects <- rep(x = objects, length.out = panels)
names <- rep(x = names, length.out = panels)
if (panels > 15) {
question <- readline(paste0(" -> this will produce ",
panels, " plots, do you wish to continue? [yes/no]: "))
question <- match.arg(question, c("yes", "no"))
if (question == "no") {
return(invisible(0))
}
}
if (panels > 1) {
ncol <- ceiling(sqrt(panels))
}
else {
ncol <- 1
}
nrow <- ceiling(panels/ncol)
panelPosY <- rep(rev(seq(from = 1, to = nrow)), each = ncol)
panelPosX <- rep(seq(from = 1, to = ncol), times = nrow)
if (newPlot) {
grid.newpage()
pushViewport(viewport(name = "geometr"))
}
for (i in 1:panels) {
if (!newPlot) {
prev <- grid.get(gPath("extentGrob"), global = TRUE)
window <- .testWindow(x = tibble(x = c(as.numeric(prev$x),
as.numeric(prev$x) + as.numeric(prev$width)),
y = c(as.numeric(prev$y), as.numeric(prev$y) +
as.numeric(prev$height))))
}
obj <- makeObject(x = objects[[i]], window = window,
image = image, theme = theme, ...)
pnl <- makeLayout(x = obj, theme = theme)
if (!is.na(names[[i]]) & !is.null(names[[i]])) {
plotName <- names[[i]]
}
else {
plotName <- obj$name
}
if (newPlot | (!newPlot & obj$type == "raster")) {
pushViewport(viewport(x = (panelPosX[i]/ncol) - (1/ncol/2),
y = (panelPosY[i]/nrow) - (1/nrow/2), width = 1/ncol,
height = 1/nrow, name = plotName))
grid.rect(width = convertX(unit(1, "npc"), "native"),
gp = gpar(col = NA, fill = NA), name = "panelGrob")
grid.rect(height = pnl$yMargin, width = pnl$xMargin,
gp = gpar(fill = NA, col = NA), name = "marginGrob")
grid.rect(x = unit(pnl$minPlotX, "points"), y = unit(pnl$minPlotY,
"points"), height = unit(pnl$maxPlotY - pnl$minPlotY,
"points"), width = unit(pnl$maxPlotX - pnl$minPlotX,
"points"), gp = gpar(fill = NA, col = NA), name = "extentGrob")
pushViewport(viewport(x = unit(0.5, "npc") + unit(pnl$xOffset,
"points"), y = unit(0.5, "npc") + unit(pnl$yOffset,
"points"), height = min(pnl$gridH, pnl$gridHr),
width = min(pnl$gridW, pnl$gridWr), name = "plot"))
if (theme@title$plot) {
pushViewport(viewport(name = "title"))
grid.text(just = "top", y = unit(1, "npc") -
unit(3, "points") + pnl$titleH, label = plotName,
gp = gpar(fontsize = theme@title$fontsize,
col = theme@title$colour))
upViewport()
}
if (theme@yAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "yAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "right", x = unit(0, "npc") -
unit(2, "points") - pnl$yAxisTicksW, label = theme@yAxis$label$title,
rot = theme@yAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@yAxis$label$fontsize,
col = theme@yAxis$label$colour))
}
if (theme@yAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$yMajGrid,
theme@yAxis$ticks$digits)), just = "right",
x = unit(-0.005, "npc"), y = unit(pnl$yMajGrid,
"native"), name = "ticks", gp = gpar(fontsize = theme@yAxis$ticks$fontsize,
col = theme@yAxis$ticks$colour))
}
upViewport()
}
if (theme@xAxis$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "xAxis"))
if (theme@yAxis$label$plot) {
grid.text(just = "bottom", y = unit(0, "npc") -
unit(2, "points") - pnl$xAxisTitleH, label = theme@xAxis$label$title,
rot = theme@xAxis$label$rotation, name = "title",
gp = gpar(fontsize = theme@xAxis$label$fontsize,
col = theme@xAxis$label$colour))
}
if (theme@xAxis$ticks$plot) {
grid.text(label = as.character(round(pnl$xMajGrid,
theme@xAxis$ticks$digits)), just = "top",
x = unit(pnl$xMajGrid, "native"), y = unit(-0.005,
"npc"), name = "ticks", gp = gpar(fontsize = theme@xAxis$ticks$fontsize,
col = theme@xAxis$ticks$colour))
}
upViewport()
}
if (theme@legend$plot & obj$hasLegend) {
pushViewport(viewport(name = "legend"))
for (j in seq_along(obj$legend)) {
theParam <- names(obj$legend)[j]
theLegend <- obj$legend[[j]]
legendName <- names(theLegend[, 1])
if (length(theLegend$pos) == 1) {
maxYScale <- theLegend$pos[length(theLegend$pos)] +
1e-05
}
else {
maxYScale <- unit(as.numeric(theLegend$pos[which.max(theLegend$pos)]) +
1, "native")
}
pushViewport(viewport(height = unit(1, "npc") *
theme@legend$sizeRatio, yscale = c(1, maxYScale),
name = legendName))
theValues <- unlist(obj$params[legendName],
use.names = FALSE)
grid.text(label = theValues, name = "legend_values",
gp = gpar(col = NA))
if (theParam %in% c("linecol", "fillcol")) {
temp <- unlist(obj$params[legendName], use.names = FALSE)
theColours <- unique(unlist(obj$params[order(temp),
][theParam], use.names = FALSE))
grid.raster(x = unit(1, "npc") + pnl$legendX[j],
width = unit(10, "points"), height = unit(1,
"npc"), just = "left", name = "legend_items",
image = rev(theColours), interpolate = FALSE)
if (theme@legend$box$plot) {
grid.rect(x = unit(1, "npc") + pnl$legendX[j],
just = "left", width = unit(10, "points"),
name = "legend_box", gp = gpar(col = theme@legend$box$colour,
fill = NA, lty = theme@legend$box$linetype,
lwd = theme@legend$box$linewidth))
}
}
else if (theParam %in% "pointsize") {
theSizes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
times = length(theLegend$pos)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theme@vector$pointsymbol[1],
size = unit(theSizes, "char"), name = "legend_items")
}
else if (theParam %in% "pointsymbol") {
theSymbols <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.points(x = rep(unit(1, "npc") + pnl$legendX[j],
length(theSymbols)), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), pch = theSymbols,
size = unit(max(theme@vector$pointsize),
"char"), name = "legend_items")
}
else if (theParam %in% c("linewidth")) {
theWidths <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = theWidths, lty = theme@vector$linetype[1]))
}
else if (theParam %in% c("linetype")) {
theTypes <- sort(unique(unlist(obj$params[theParam],
use.names = FALSE)))[theLegend$pos]
grid.polyline(x = rep(unit(c(1, 1), "npc") +
unit.c(pnl$legendX[j], pnl$legendX[j] +
unit(10, "points")), times = length(theLegend$pos)),
y = unit(rep(theLegend$pos, each = 2),
"native") - unit(0.5, "native"), id = rep(theLegend$pos,
each = 2), name = "legend_items", gp = gpar(col = theme@vector$linecol[1],
lwd = max(theme@vector$linewidth), lty = theTypes))
}
if (theme@legend$label$plot) {
grid.text(label = unlist(theLegend[legendName],
use.names = FALSE), x = unit(1, "npc") +
pnl$legendX[j] + unit(15, "points"), y = unit(theLegend$pos,
"native") - unit(0.5, "native"), name = "legend_labels",
just = c("left"), gp = gpar(fontsize = theme@legend$label$fontsize,
col = theme@legend$label$colour))
}
upViewport()
}
upViewport()
}
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "gridGrob")
if (theme@grid$plot) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "majorGrid"))
grid.grill(h = unit(pnl$yMajGrid, "native"),
v = unit(pnl$xMajGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth, lty = theme@grid$linetype))
upViewport()
if (theme@grid$minor) {
pushViewport(viewport(xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin),
yscale = c(pnl$minPlotY - pnl$yMargin, pnl$maxPlotY +
pnl$yMargin), name = "minorGrid"))
grid.grill(h = unit(pnl$yMinGrid, "native"),
v = unit(pnl$xMinGrid, "native"), gp = gpar(col = theme@grid$colour,
lwd = theme@grid$linewidth/2, lty = theme@grid$linetype))
upViewport()
}
}
if (theme@box$plot) {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native"), height = unit(1,
"npc") - unit(2 * pnl$yMargin, "native"), name = "box"))
grid.rect(gp = gpar(fill = NA, col = theme@box$colour,
lwd = theme@box$linewidth, lty = theme@box$linetype),
name = "theBox")
upViewport()
}
upViewport()
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "object"))
grid.rect(gp = gpar(col = NA, fill = NA), name = "objectGrob")
if (obj$type == "raster") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "raster"))
grid.clip(width = unit(1, "npc"), height = unit(1,
"npc"))
grid.raster(x = unit(0, "npc") - unit(pnl$xWindowOffset,
"npc") * pnl$xFactor, y = unit(0, "npc") -
unit(pnl$yWindowOffset, "npc") * pnl$yFactor,
width = unit(pnl$xFactor, "npc"), height = unit(pnl$yFactor,
"npc"), hjust = 0, vjust = 0, image = matrix(data = obj$array,
nrow = obj$rows, ncol = obj$cols, byrow = TRUE),
name = "theRaster", interpolate = FALSE)
}
else if (obj$type == "vector") {
pushViewport(viewport(width = unit(1, "npc") -
unit(2 * pnl$xMargin, "native") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") - unit(2 *
pnl$yMargin, "native") + unit(theme@box$linewidth,
"points"), xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "vector"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
}
upViewport()
upViewport(3)
}
else {
downViewport(panelNames[i])
downViewport("plot")
pushViewport(viewport(xscale = c(pnl$minPlotX - pnl$xMargin,
pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "grid"))
pushViewport(viewport(width = unit(1, "npc") - unit(2 *
pnl$xMargin, "native"), height = unit(1, "npc") -
unit(2 * pnl$yMargin, "native"), xscale = c(pnl$minPlotX -
pnl$xMargin, pnl$maxPlotX + pnl$xMargin), yscale = c(pnl$minPlotY -
pnl$yMargin, pnl$maxPlotY + pnl$yMargin), name = "geom"))
if (clip) {
grid.clip(width = unit(1, "npc") + unit(theme@box$linewidth,
"points"), height = unit(1, "npc") + unit(theme@box$linewidth,
"points"))
}
grid.draw(obj$out)
upViewport(4)
}
}
upViewport()
if (trace) {
plotHistory <- FALSE
for (i in seq_along(objects)) {
hasHistory <- ifelse(!is.null(tryCatch(expr = objects[[i]]@history,
error = function(x) NULL)), TRUE, FALSE)
if (hasHistory) {
theHistory <- unlist(objects[[i]]@history)
if (!is.null(theHistory)) {
histMsg <- paste0("this object has the following history:\n -> ",
paste0(theHistory, collapse = "\n -> "))
plotHistory <- TRUE
}
}
}
if (plotHistory) {
message(paste0(histMsg, collapse = "\n"))
}
else {
message(paste0("this object has the following history:\n -> object loaded from memory"))
}
}
invisible(recordPlot(attach = "geometr"))
}
<bytecode: 0x12b1f970>
<environment: namespace:geometr>
--- function search by body ---
Function visualise in namespace geometr has this body.
----------- END OF FAILURE REPORT --------------
── 2. Error: visualise a matrix (@test_visualise.R#21) ────────────────────────
the condition has length > 1
Backtrace:
1. geometr::visualise(`my matrix` = aMatrix)
══ testthat results ═══════════════════════════════════════════════════════════
[ OK: 693 | SKIPPED: 0 | WARNINGS: 8 | FAILED: 2 ]
1. Error: sketch a point geometry from a matrix (@test_gt_sketch.R#15)
2. Error: visualise a matrix (@test_visualise.R#21)
Error: testthat unit tests failed
Execution halted
Flavor: r-devel-linux-x86_64-fedora-gcc
Version: 0.1.1
Check: running tests for arch ‘i386’
Result: ERROR
Running 'testthat.R' [20s]
Running the tests in 'tests/testthat.R' failed.
Complete output:
> library(testthat)
> library(checkmate)
> library(raster)
Loading required package: sp
> library(sp)
> library(sf)
Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
>
> test_check("geometr")
Loading required package: geometr
-- 1. Failure: transform from geom to grob (@test_gc_grob.R#25) ---------------
Check on names(polyGrob[[1]]) isn't true.
Must be a permutation of set {x,y,id,id.lengths,pathId,pathId.lengths,rule,name,gp,vp}
Reading layer `nc' from data source `D:\temp\Rtmp0YNYTw\RLIBS_4f6c42154e66\sf\shape\nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID): 4267
proj4string: +proj=longlat +datum=NAD27 +no_defs
== testthat results ===========================================================
[ OK: 695 | SKIPPED: 0 | WARNINGS: 8 | FAILED: 1 ]
1. Failure: transform from geom to grob (@test_gc_grob.R#25)
Error: testthat unit tests failed
Execution halted
Flavor: r-oldrel-windows-ix86+x86_64
Version: 0.1.1
Check: running tests for arch ‘x64’
Result: ERROR
Running 'testthat.R' [22s]
Running the tests in 'tests/testthat.R' failed.
Complete output:
> library(testthat)
> library(checkmate)
> library(raster)
Loading required package: sp
> library(sp)
> library(sf)
Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
>
> test_check("geometr")
Loading required package: geometr
-- 1. Failure: transform from geom to grob (@test_gc_grob.R#25) ---------------
Check on names(polyGrob[[1]]) isn't true.
Must be a permutation of set {x,y,id,id.lengths,pathId,pathId.lengths,rule,name,gp,vp}
Reading layer `nc' from data source `D:\temp\Rtmp0YNYTw\RLIBS_4f6c42154e66\sf\shape\nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID): 4267
proj4string: +proj=longlat +datum=NAD27 +no_defs
== testthat results ===========================================================
[ OK: 695 | SKIPPED: 0 | WARNINGS: 8 | FAILED: 1 ]
1. Failure: transform from geom to grob (@test_gc_grob.R#25)
Error: testthat unit tests failed
Execution halted
Flavor: r-oldrel-windows-ix86+x86_64
Version: 0.1.1
Check: tests
Result: ERROR
Running ‘testthat.R’ [18s/18s]
Running the tests in ‘tests/testthat.R’ failed.
Last 13 lines of output:
Must be a permutation of set {x,y,id,id.lengths,pathId,pathId.lengths,rule,name,gp,vp}
Reading layer `nc' from data source `/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.5/sf/shape/nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID): 4267
proj4string: +proj=longlat +datum=NAD27 +no_defs
══ testthat results ═══════════════════════════════════════════════════════════
[ OK: 695 | SKIPPED: 0 | WARNINGS: 8 | FAILED: 1 ]
1. Failure: transform from geom to grob (@test_gc_grob.R#25)
Error: testthat unit tests failed
Execution halted
Flavor: r-oldrel-osx-x86_64