skip_if_not_installed("terra")
test_that("terra conversion does not alter data", {
expect_error(as.SpatRaster(1), "not a magpie object")
for (i in c(0.5, 2)) {
for (j in c(1, 4)) {
for (t in c(1, 3)) {
r <- terra::rast(ncols = 360 / i, nrows = 180 / i, nlyrs = j * t)
if (t > 1) {
years <- paste0("y", 1900 + 1:t)
data <- paste0("bla", 1:j)
names(r) <- paste0(rep(years, each = j), "..", rep(data, t))
} else {
names(r) <- paste0("bla", 1:j)
}
r[85:89, 176:179] <- (1:20 %*% t(1:(j * t)))
m <- as.magpie(r)
expect_equal(ndata(m), j)
expect_equal(nyears(m), t)
r2 <- as.SpatRaster(m)
srd <- as.SpatRasterDataset(m)
expect_identical(names(srd), getItems(m, 3))
noTime <- function(a) {
terra::time(a) <- NULL
return(a)
}
# comparing times does not work here, so compare separately
expect_equal(noTime(r), noTime(terra::extend(r2[[names(r)]], terra::ext(r))))
if (t > 1) {
expect_equal(terra::time(r2), rep_len(1900 + 1:t, terra::nlyr(r)))
}
m2 <- as.magpie(r2)
expect_identical(m, m2)
v <- terra::as.polygons(r)
m3 <- as.magpie(v)
v2 <- as.SpatVector(m3)
m4 <- as.magpie(v2)
expect_equal(m3, m4)
v3 <- as.SpatVector(m4)
expect_equal(v2, v3)
}
}
}
})
skip_if_not_installed("raster")
test_that("raster conversion does not alter data", {
expect_error(as.RasterBrick(1), "not a magpie object")
for (i in c(0.5, 2)) {
for (j in c(1, 4)) {
for (t in c(1, 3)) {
r <- raster::brick(ncols = 360 / i, nrows = 180 / i, nl = j * t)
if (t > 1) {
years <- paste0("y", 1900 + 1:t)
data <- paste0("bla", 1:j)
names(r) <- paste0(rep(years, each = j), "..", rep(data, t))
} else {
names(r) <- paste0("bla", 1:j)
}
r[85:89, 176:179] <- (1:20 %*% t(1:(j * t)))
m <- as.magpie(r)
expect_equal(ndata(m), j)
expect_equal(nyears(m), t)
r2 <- as.RasterBrick(m)
expect_identical(r[[names(r)]], r2[[names(r)]])
m2 <- as.magpie(r2)
expect_identical(m, m2)
}
}
}
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.