Растеризация данных с использованием расстояния Earth Mover
У меня есть набор данных, содержащий координаты UTM (x, y), и у меня есть несколько дат. Данные были разбиты на 10-дневные интервалы, и был создан список фреймов данных. Я создал оценки домашнего диапазона LoCoH для каждого из этих 10-дневных интервалов и создал из них изоплеты. Я пытаюсь растрировать изоплеты, которые будут использоваться в функции в
move
пакет, но я получаю эту ошибку, когда пытаюсь использовать
emd()
функция:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘emd’ for signature ‘"RasterLayer", "missing"’
Вот мой код с примером набора данных:
# Libraries ----
library(tidyverse)
library(lubridate)
library(amt)
library(raster)
library(sf)
#Example Data
date <- rep_len(seq(dmy("26-12-2010"), dmy("31-01-2011"), by = "days"), 500)
df <- data.frame(date = date,
x = runif(length(date), min = 60000, max = 80000),
y = runif(length(date), min = 800000, max = 900000))
# Arranges the date and time from earliest to latest
df <- df%>%
arrange(date)
# Formats the Date and Time Column to just date
df$date <- as.POSIXct(format(df$date, format="%Y-%m-%d"))
# Create list of data frames that hold 10-day intervals
t <- unique(df$date)[seq(from = 1,
to = length(unique(df$date)),
by = 9)]
interval_10 <- lapply(
1:(length(t)-1),
function(k) df %>% filter(date <= t[k+1], date >= t[k])
)
# Creates tracks for list of dataframes
track_list_sub <- lapply(interval_10, function(x) {
make_track(tbl = x, .x = utm_x, .y = utm_y, .t = date,
uid = AnimalID,
# lat/long: 4326 (lat/long, WGS84 datum).
# utm: crs = sp::CRS("+init=epsg:32612"))
crs = sp::CRS("+init=epsg:32612"))
})
# LoCoH home ranges ----
#Calculate the distance between all points in each list
locoh <- list()
locoh_dflist <- for (i in 1:length(ldf)) {
# Print status
Sys.sleep(0.01)
setTxtProgressBar(pb, i)
# Calculate LoCoH a*
dmat <- dist(track_list_sub[[i]][, c("x_", "y_")])
a <- max(dmat)
# Fit LoCoH
locoh[[i]] <- hr_locoh(x = track_list_sub[[i]],
levels = seq(0.1, 1, by = 0.1),
keep.data = TRUE,
n = a,
type = "a",
rand_buffer = 1e-05)
}
return(locoh)
}
# Examine the resulting object
str(locoh[[1]])
# Obtains locoh area of specified list
hr_area(locoh[[1]])
# Testing code before for loop ----
# Creates a raster layer
r <- raster(as(locoh_iso[[1]], "Spatial"), ncol=90, nrow=45,
crs = sp::CRS("+init=epsg:32612"))
# Rasterizes the 2nd isopleth(SpatialPolygonDataFrame)
raster_locoh <- rasterize(locoh_iso[[1]], r)
x <- 1- (raster_locoh /cellStats(raster_locoh,sum))
# Calculate EMD between second and first values in the list
move::emd(x)