mutate не может найти функцию - PullRequest
       15

mutate не может найти функцию

5 голосов
/ 01 августа 2020

Я работаю через код eBird с этой веб-страницы: https://github.com/CornellLabofOrnithology/ebird-best-practices/blob/master/03_covariates.Rmd

за исключением использования моих собственных данных. У меня есть .gpkg от gadm.org в Австралии, и мои собственные данные ebird, выбранные для Австралии. Я точно выполнил код, за исключением того, что не использовал «bcr», поскольку в моем наборе данных нет кодов bcr, а также удалил st_buffer(dist = 10000) из кода rgdal, потому что это помешало мне по какой-то причине загрузить данные MODIS.

РЕДАКТИРОВАТЬ: Я также использовал предоставленные данные с сайта и все равно получил ту же ошибку

Я застрял на этом коде:

lc_extract <- ebird_buff %>% 
mutate(pland = map2(year_lc, data, calculate_pland, lc = landcover)) %>% 
select(pland) %>% 
unnest(cols = pland)

Он возвращает эту ошибку:

Error: Problem with `mutate()` input `pland`.
x error in evaluating the argument 'x' in selecting a method for function 'exact_extract': invalid layer names
i Input `pland` is `map2(year_lc, data, calculate_pland, lc = landcover)`.)`

Кажется, я не могу понять, как это исправить, я новичок в таком плотном геопространственном коде, как этот.

Есть бесплатный набор данных в ссылке, но я еще не пробовал его, так что, возможно, мои данные несовместимы с кодом? тем не менее, я взглянул на предоставленный Gis-data.gpkg, и мои данные из gadm кажутся нормальными.

Предыдущие два кода к приведенному выше были:

neighborhood_radius <- 5 * ceiling(max(res(landcover))) / 2
 ebird_buff <- red_knot %>% 
     distinct(year = format(observation_date, "%Y"),
              locality_id, latitude, longitude) %>% 
     # for 2019 use 2018 landcover data
     mutate(year_lc = if_else(as.integer(year) > max_lc_year, 
                              as.character(max_lc_year), year),
            year_lc = paste0("y", year_lc)) %>% 
     # convert to spatial features
     st_as_sf(coords = c("longitude", "latitude"), crs = 4326) %>% 
     # transform to modis projection
     st_transform(crs = projection(landcover)) %>% 
     # buffer to create neighborhood around each point
     st_buffer(dist = neighborhood_radius) %>% 
     # nest by year
     nest(data = c(year, locality_id, geometry))
 calculate_pland <- function(yr, regions, lc) {
     locs <- st_set_geometry(regions, NULL)
     exact_extract(lc[[yr]], regions, progress = FALSE) %>% 
         map(~ count(., landcover = value)) %>% 
         tibble(locs, data = .) %>% 
         unnest(data)
 }

1 Ответ

2 голосов
/ 04 августа 2020

На это ответил автор веб-страницы.

Решение было следующим кодом:

lc_extract <- NULL
for (yr in names(landcover)) {
  # get the buffered checklists for a given year
  regions <- ebird_buff$data[[which(yr == ebird_buff$year_lc)]]
  # get landcover values within each buffered checklist area
  ee <- exact_extract(landcover[[yr]], regions, progress = FALSE)
  # count the number of each landcover class for each checklist buffer
  ee_count <- map(ee, ~ count(., landcover = value))
  # attach the year and locality id back to the checklists
  ee_summ <- tibble(st_drop_geometry(regions), data = ee_count) %>% 
    unnest(data)
  # bind to results
  lc_extract <- bind_rows(lc_extract, ee_summ)
}

кредитов go: Мэтту Стримас-Макки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...