test_that("Drop na with SpatVectors", {
f <- system.file("extdata/cyl.gpkg",
package = "tidyterra"
)
v <- terra::vect(f)
v[1, 1] <- NA
dropped1 <- drop_na(v)
# Check with tibble method
dropped_check <- tidyr::drop_na(as_tibble(v))
expect_s4_class(dropped1, "SpatVector")
expect_length(dropped1, nrow(v) - 1)
expect_identical(as_tibble(dropped1), dropped_check)
nona <- drop_na(v, cpro)
nonacheck <- tidyr::drop_na(as_tibble(v), cpro)
expect_s4_class(nona, "SpatVector")
expect_length(nona, nrow(v))
expect_identical(as_tibble(nona), nonacheck)
})
test_that("groups are preserved", {
df <- data.frame(g = c("A", "A", "B"), x = c(1, 2, NA), y = c("a", NA, "b"))
df$lon <- seq_len(nrow(df))
df$lat <- df$lon
df <- terra::vect(df)
exp <- data.frame(g = c("A", "B"), x = c(1, NA), y = c("a", "b"))
gdf <- group_by(df, g)
gexp <- dplyr::group_by(exp, g)
res <- drop_na(gdf, y)
expect_s4_class(res, "SpatVector")
expect_identical(as.data.frame(res), as.data.frame(gexp))
expect_identical(group_vars(res), dplyr::group_vars(gexp))
})
test_that("Return empty geom when no results", {
f <- system.file("extdata/cyl.gpkg",
package = "tidyterra"
)
v <- terra::vect(f)
v$cpro <- NA
expect_snapshot(empty <- drop_na(v))
expect_equal(ncol(empty), 0)
expect_equal(nrow(empty), 1)
tbl2 <- tibble::tibble(geometry = "POINT EMPTY")
attr(tbl2, "crs") <- pull_crs(v)
expect_identical(as_tibble(empty, geom = "WKT"), tbl2)
# Does not preserve crs if not provided
nocrs <- v
terra::crs(nocrs) <- NA
expect_snapshot(emptycrs <- drop_na(nocrs))
expect_identical(
as.data.frame(emptycrs, geom = "WKT"),
data.frame(geometry = "POINT EMPTY")
)
expect_true(is.na(pull_crs(emptycrs)))
})
test_that("Drop na with SpatRaster", {
r <- terra::rast(
extent = c(0, 10, 0, 10),
nlyr = 3,
resolution = c(2.5, 2.5)
)
terra::values(r) <- seq_len(terra::ncell(r) * terra::nlyr(r))
# Add NAs
r[r > 31 & r < 45] <- NA
# Extract as tibble for comparison
tbl <- as_tibble(r, na.rm = FALSE)
# Drop all
all <- drop_na(r)
expect_snapshot(res <- compare_spatrasters(r, all))
expect_false(res)
expect_equal(
nrow(tidyr::drop_na(tbl)),
terra::ncell(all)
)
# Drop based on layer
lyr <- drop_na(r, lyr.1)
expect_silent(compare_spatrasters(r, lyr))
expect_true(compare_spatrasters(r, lyr))
expect_equal(
nrow(tidyr::drop_na(tbl, lyr.1)),
terra::ncell(lyr)
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.