Растеризация данных с использованием расстояния 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)

0 ответов

Другие вопросы по тегам