r - 如何从 MODISTools 中的超时错误中恢复
问题描述
我很高兴能够使用 MODISTools 下载图像匹配的时间和空间。具体来说,MODISTools 正在查找由另一颗卫星进行的一百万个相关观测的叶面积指数。正如警告的那样,NASA 服务器会定期超时。
发生这种情况时,我希望 r 捕获错误,稍等片刻(如果甚至需要),然后再试一次。我知道等待不需要超过几秒钟,因为我正在运行多个实例,并且一次只有一个或两个超时。一旦检测到错误,处理可以通过重试相同的步骤来恢复,或者,具有基本相同的效果,通过重新启动下面粘贴的序列。有没有一种简单的方法可以做到这一点?如果它涉及从 r 调用服务器命令,请为一个无知的人写下你的答案!
这是一个示例,但如果没有超时,它不会说明太多。为简单起见,我显示了固定的位置和日期。在实际运行中,它们来自 my.chunk 数据框中的其他字段。
look.these.up <- which(is.na(my.chunk$lai))
for (m.obs in look.these.up) {
junk <- mt_subset(product = "MOD15A2H", lon = 5, lat = 5,
start = "2017-01-01", end = "2017-01-08")
my.chunk$lai[m.obs] <- junk$data[, "data"][5]
}
解决方案
这对我有用。我抬头看了看。如何查看函数的源代码?如何查看 mt_subset 命令背后的代码并对其进行修改。
由于我需要的 MODIS 数据子集有限,因此可以进行一些简化,例如在 for 循环之外创建 all.dates 并删除大部分输入错误检查。
for (m.obs in 1:n.obs) {
modis.date <- all.dates[which(all.dates$calendar_date <=
ret.date & all.dates$calendar_date >= (ret.date - 7)), 1][1]
## Retrieve the MODIS values for the obs time & place
m.response <- httr::GET(
url = "https://modis.ornl.gov/rst/api/v1/MOD15A2H/subset",
query = list(latitude = my.chunk$lat[m.obs],
longitude = my.chunk$lon[m.obs],
startDate = modis.date, endDate = modis.date,
kmAboveBelow = 0, kmLeftRight = 0),
httr::write_memory())
## If connection fails, try it again up to 10 times.
attempts = 0
while (httr::http_error(m.response)) {
attempts = attempts + 1
print(paste0("retry # ", attempts))
if (attempts >= 10) {
stop()
m.response <- NULL
}
Sys.sleep(1) # seconds
m.response <- httr::GET(
url = "https://modis.ornl.gov/rst/api/v1/MOD15A2H/subset",
query = list(latitude = my.chunk$lat[m.obs],
longitude = my.chunk$lon[m.obs],
startDate = modis.date, endDate = modis.date,
kmAboveBelow = 0, kmLeftRight = 0),
httr::write_memory())
}
modis.vals <- jsonlite::fromJSON(httr::content(m.response,
"text", encoding = "UTF-8"),
simplifyVector = TRUE)$subset[, "data"] # decodes returned data
my.chunk$fpar[m.obs] <- modis.vals[[6]] # fPar
etc.
}
推荐阅读
- angularjs - 未知提供者:uiCropperProvider <- uiCropper
- php - Laravel 检查状态并发送电子邮件
- angular5 - 在 PrimeNG p-table 'Column Resize' with Frozen Columns
- java - 在下一个方法调用之前 Asynctask 未完成下载
- jenkins - Jenkinsfile(脚本)将 shell $HOME 设置为 ${env.WORKSPACE}
- asp.net - ASP.NET MVC 5 - 使已删除用户的 cookie 无效
- python - python中是否有类似于sys.maxint的sys.minint?
- python - Python Turtle 等待按键
- vue.js - 使用没有 webpack 但带有内联脚本 vue.js 的 npm 模块
- xmpp - ejabberd: mom_mam 抛出错误