【问题标题】:mutate cannot find function变异找不到函数
【发布时间】:2020-11-22 05:42:04
【问题描述】:

我正在处理此网页中的 eBird 代码: https://github.com/CornellLabofOrnithology/ebird-best-practices/blob/master/03_covariates.Rmd

除了使用我自己的数据。我有一个来自澳大利亚 gadm.org 的 .gpkg,我自己的 ebird 数据选择用于澳大利亚。除了不使用“bcr”之外,我已经完全按照代码进行了操作,因为我的数据集没有 bcr 代码,并从 rgdal 代码中删除了st_buffer(dist = 10000),因为这阻止了我出于某种原因实际下载 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)
 }

【问题讨论】:

    标签: r function dplyr


    【解决方案1】:

    网页作者已经回答了这个问题。

    解决方案是这段代码:

    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)
    }
    

    学分转到: 马特·斯特里马斯-麦基

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2014-03-25
      • 2021-11-10
      • 2016-04-09
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多