test_that("SpatRaster mutate", {
f <- system.file("extdata/cyl_temp.tif", package = "tidyterra")
spatrast <- terra::rast(f)
mod <- spatrast %>%
mutate(exp_lyr1 = exp(tavg_04 / 10))
expect_true(compare_spatrasters(spatrast, mod))
expect_gt(terra::nlyr(mod), terra::nlyr(spatrast))
})
test_that("SpatRaster mutate and check names", {
f <- system.file("extdata/cyl_temp.tif", package = "tidyterra")
init <- terra::rast(f)
spatrast <- init
names(spatrast) <- c("a", "a", "b")
expect_snapshot(fixed_names <- dplyr::mutate(spatrast, b2 = a + 100))
all_eq <- all(names(fixed_names) == make.names(c(
names(spatrast),
"b2"
), unique = TRUE))
expect_true(all_eq)
expect_true(compare_spatrasters(init, fixed_names))
# Same with layer names as x,y
names(spatrast) <- c("x", "x", "y")
expect_snapshot(
fixed_names2 <- dplyr::mutate(spatrast, b2 = x.1 + x.2 + y.1)
)
all_eq <- all(names(fixed_names2) == make.names(
c(
"x", "y",
names(spatrast),
"b2"
),
unique = TRUE
)[-c(1, 2)])
expect_true(all_eq)
expect_true(compare_spatrasters(init, fixed_names2))
})
test_that("SpatVector", {
# SpatVector method
f <- system.file("extdata/cyl.gpkg", package = "tidyterra")
v <- terra::vect(f)
mutated <- mutate(v, cpro2 = paste0(cpro, "-CyL"))
expect_s4_class(mutated, "SpatVector")
expect_gt(ncol(mutated), ncol(v))
expect_identical(
mutated$cpro2,
paste0(v$cpro, "-CyL")
)
})
test_that("mutate preserves grouping", {
df <- tibble::tibble(x = 1:2, y = 2)
df <- as_spatvector(df, geom = c("x", "y"), keepgeom = TRUE)
gf <- group_by(df, x)
out <- mutate(gf, x = 1)
expect_equal(group_vars(out), "x")
expect_equal(nrow(group_data(out)), 1)
out <- mutate(gf, z = 1)
expect_equal(group_data(out), group_data(gf))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.