# \donttest{
if (requireNamespace("sf", quietly = TRUE) &&
requireNamespace("terra", quietly = TRUE)) {
dPath <- checkPath(file.path(tempdir2()), create = TRUE)
localFileLux <- system.file("ex/lux.shp", package = "terra")
# 1 step for each layer
# 1st step -- get study area
full <- prepInputs(localFileLux, destinationPath = dPath) # default is sf::st_read
zoneA <- full[3:6, ]
zoneB <- full[8, ] # not in A
zoneC <- full[3, ] # yes in A
zoneD <- full[7:8, ] # not in A, B or C
zoneE <- full[3:5, ] # yes in A
# 2nd step: re-write to disk as read/write is lossy; want all "from disk" for this ex.
writeTo(zoneA, writeTo = "zoneA.shp", destinationPath = dPath)
writeTo(zoneB, writeTo = "zoneB.shp", destinationPath = dPath)
writeTo(zoneC, writeTo = "zoneC.shp", destinationPath = dPath)
writeTo(zoneD, writeTo = "zoneD.shp", destinationPath = dPath)
writeTo(zoneE, writeTo = "zoneE.shp", destinationPath = dPath)
# Must re-read to get identical columns
zoneA <- sf::st_read(file.path(dPath, "zoneA.shp"))
zoneB <- sf::st_read(file.path(dPath, "zoneB.shp"))
zoneC <- sf::st_read(file.path(dPath, "zoneC.shp"))
zoneD <- sf::st_read(file.path(dPath, "zoneD.shp"))
zoneE <- sf::st_read(file.path(dPath, "zoneE.shp"))
# The function that is to be run. This example returns a data.frame because
# saving `sf` class objects with list-like columns does not work with
# many st_driver()
fun <- function(domain, newField) {
domain |>
as.data.frame() |>
cbind(params = I(lapply(seq_len(NROW(domain)), function(x) newField)))
}
# Run sequence -- A, B will add new entries in targetFile, C will not,
# D will, E will not
for (z in list(zoneA, zoneB, zoneC, zoneD, zoneE)) {
out <- CacheGeo(
targetFile = "fireSenseParams.rds",
domain = z,
FUN = fun(domain, newField = I(list(list(a = 1, b = 1:2, c = "D")))),
fun = fun, # pass whatever is needed into the function
destinationPath = dPath,
action = "update"
# , cloudFolderID = "cachedObjects" # to upload/download from cloud
)
}
}
# }
Run the code above in your browser using DataLab