等待 rgbif 下载完成后再继续
Wait for rgbif download to complete before proceeding
我正在用 R Shiny 开发一个小应用程序。部分应用需要查询GBIF下载物种发生数据。这可以使用 rgbif
。函数 rgbif::occ_download()
将下载数据,而 rgbif::occ_download_meta()
将检查 GBIF 是否已满足您的请求。例如:
geometry <- "POLYGON((30.1 10.1,40 40,20 40,10 20,30.1 10.1))"
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
occ_download_meta(res)
<<gbif download metadata>>
Status: RUNNING
Format: SPECIES_LIST
Download key: 0004089-190415153152247
Created: 2019-04-25T09:18:20.952+0000
Modified: 2019-04-25T09:18:21.045+0000
Download link: http://api.gbif.org/v1/occurrence/download/request/0004089-190415153152247.zip
Total records: 0
到目前为止,还不错。但是,在 occ_download_meta(res)
完成(当 Status = SUCCEEDED)之前,以下函数 rgbif::occ_download_get()
无法下载数据用于下游分析。
如何让会话等到 GBIF 下载完成?我无法将等待时间硬编码到脚本中,因为不同大小的范围将花费 GBIF 更长或更短的时间来处理。此外,查询该服务的其他活跃用户的数量也可能会改变等待时间。因此,在继续之前,我需要某种标志,其中 Status == Succeeded。
我已经复制了一些框架代码,下面有注释。
library(rgbif)
geometry <- "POLYGON((30.1 10.1,40 40,20 40,10 20,30.1 10.1))" # Define boundary
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
# WAIT HERE UNTIL Status == SUCCEEDED
occ_download_meta(res)
x <- occ_download_get(res, overwrite = TRUE) # Download data
data<-occ_download_import(x) # Import into R
这里是 rgbif 维护者。您可以像我们在 occ_download_queue()
函数中那样做一些事情:
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
still_running <- TRUE
status_ping <- 3
while (still_running) {
meta <- occ_download_meta(res)
status <- meta$status
still_running <- status %in% c("succeeded", "killed")
Sys.sleep(status_ping) # sleep between pings
}
你可能想检查成功和被杀死,如果被杀死则做一些不同的事情
我正在用 R Shiny 开发一个小应用程序。部分应用需要查询GBIF下载物种发生数据。这可以使用 rgbif
。函数 rgbif::occ_download()
将下载数据,而 rgbif::occ_download_meta()
将检查 GBIF 是否已满足您的请求。例如:
geometry <- "POLYGON((30.1 10.1,40 40,20 40,10 20,30.1 10.1))"
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
occ_download_meta(res)
<<gbif download metadata>>
Status: RUNNING
Format: SPECIES_LIST
Download key: 0004089-190415153152247
Created: 2019-04-25T09:18:20.952+0000
Modified: 2019-04-25T09:18:21.045+0000
Download link: http://api.gbif.org/v1/occurrence/download/request/0004089-190415153152247.zip
Total records: 0
到目前为止,还不错。但是,在 occ_download_meta(res)
完成(当 Status = SUCCEEDED)之前,以下函数 rgbif::occ_download_get()
无法下载数据用于下游分析。
如何让会话等到 GBIF 下载完成?我无法将等待时间硬编码到脚本中,因为不同大小的范围将花费 GBIF 更长或更短的时间来处理。此外,查询该服务的其他活跃用户的数量也可能会改变等待时间。因此,在继续之前,我需要某种标志,其中 Status == Succeeded。
我已经复制了一些框架代码,下面有注释。
library(rgbif)
geometry <- "POLYGON((30.1 10.1,40 40,20 40,10 20,30.1 10.1))" # Define boundary
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
# WAIT HERE UNTIL Status == SUCCEEDED
occ_download_meta(res)
x <- occ_download_get(res, overwrite = TRUE) # Download data
data<-occ_download_import(x) # Import into R
这里是 rgbif 维护者。您可以像我们在 occ_download_queue()
函数中那样做一些事情:
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
still_running <- TRUE
status_ping <- 3
while (still_running) {
meta <- occ_download_meta(res)
status <- meta$status
still_running <- status %in% c("succeeded", "killed")
Sys.sleep(status_ping) # sleep between pings
}
你可能想检查成功和被杀死,如果被杀死则做一些不同的事情