test_that("Replace NA with SpatVectors", {
f <- system.file("extdata/cyl.gpkg",
package = "tidyterra"
)
v <- terra::vect(f)
names(v) <- paste0("attr_", seq_len(terra::ncol(v)))
v[c(1, 7), 1] <- NA
v[2, 3] <- NA
df_init <- terra::as.data.frame(v)
expect_true(any(is.na(df_init)))
replaced1 <- replace_na(v, list(attr_1 = "SomeValue"))
expect_s4_class(replaced1, "SpatVector")
# Geoms are kept
expect_true(all(terra::geom(replaced1) == terra::geom(v)))
df <- terra::as.data.frame(replaced1)
expect_false(any(is.na(df[, 1])))
expect_true(any(is.na(df[, 3])))
expect_true("SomeValue" %in% df[, 1])
replaced2 <- replace_na(v, list(attr_3 = "AnotherValue"))
expect_s4_class(replaced2, "SpatVector")
# Geoms are kept
expect_true(all(terra::geom(replaced2) == terra::geom(v)))
df2 <- terra::as.data.frame(replaced2)
expect_true(any(is.na(df2[, 1])))
expect_false(any(is.na(df2[, 3])))
expect_true("AnotherValue" %in% df2[, 3])
replaced3 <- replace_na(v, list(
attr_1 = "Values",
attr_3 = "Values"
))
expect_s4_class(replaced3, "SpatVector")
# Geoms are kept
expect_true(all(terra::geom(replaced3) == terra::geom(v)))
# No NAs in the dataframe
df3 <- terra::as.data.frame(replaced3)
expect_true(all(!is.na(df3)))
})
test_that("Replace na with SpatRaster", {
r <- terra::rast(
extent = c(0, 10, 0, 10),
nlyr = 3,
resolution = c(2.5, 2.5)
)
names(r) <- paste0("lyr_", seq_len(terra::nlyr(r)))
terra::values(r) <- seq_len(terra::ncell(r) * terra::nlyr(r))
# Add NAs
r[r < 5 | r > 31 & r < 45] <- NA
# Extract as tibble for comparison
tbl <- as_tibble(r, na.rm = FALSE)
expect_true(any(is.na(tbl)))
# Replace on lyr1
expect_s4_class(r, "SpatRaster")
rep <- replace_na.SpatRaster(r, replace = list(lyr_1 = 10e5))
expect_s4_class(rep, "SpatRaster")
expect_true(compare_spatrasters(r, rep))
tbl2 <- as_tibble(rep, na.rm = FALSE)
expect_true(any(is.na(tbl2)))
expect_true(any(is.na(tbl$lyr_1)))
expect_false(any(is.na(tbl2$lyr_1)))
expect_true(max(tbl2$lyr_1) == 10e5)
# Check with double replacement
rep2 <- replace_na.SpatRaster(r, replace = list(
lyr_2 = -10,
lyr_3 = -20
))
expect_s4_class(rep2, "SpatRaster")
expect_true(compare_spatrasters(r, rep2))
tbl3 <- as_tibble(rep2, na.rm = FALSE)
expect_true(any(is.na(tbl3)))
expect_true(any(is.na(tbl3$lyr_1)))
expect_false(any(is.na(tbl3$lyr_2)))
expect_false(any(is.na(tbl3$lyr_3)))
expect_true(is.na(min(tbl3$lyr_1)))
expect_true(min(tbl3$lyr_2) == -10)
expect_true(min(tbl3$lyr_3) == -20)
# Does not replace anything
tbl_norep <- tidyr::replace_na(tbl)
rep_nothing <- replace_na.SpatRaster(r)
expect_s4_class(rep, "SpatRaster")
expect_true(compare_spatrasters(r, rep))
tbl2_nothing <- as_tibble(rep_nothing, na.rm = FALSE)
expect_identical(tbl_norep, tbl2_nothing)
# Replace with mixed cols
r_char <- mutate(r, a_char = ifelse(is.na(lyr_1), NA, as.character(lyr_1)))
# For comparison
tbl_char <- as_tibble(r_char)
tbl_char$a_char <- as.character(tbl_char$a_char)
tbl_char <- tidyr::replace_na(tbl_char, list(
lyr_1 = 5,
a_char = "Char"
))
r_subs <- replace_na(r_char, list(
lyr_1 = 5,
a_char = "Char"
))
expect_s4_class(r_subs, "SpatRaster")
expect_true(compare_spatrasters(r, r_subs))
tbl2_mixed <- as_tibble(r_subs, na.rm = FALSE)
tbl2_mixed$a_char <- as.character(tbl2_mixed$a_char)
expect_identical(tbl_char, tbl2_mixed)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.