【发布时间】:2015-12-28 16:57:08
【问题描述】:
我正在尝试在 R 中使用 while 循环实现 tryCatch,但遇到了问题。我尝试实施一些建议的解决方案(围绕 for 循环),但没有成功。
本质上,我正在使用 R 查询 API 并循环访问许多相关参数(准确地说是经度和纬度)。我需要一个 tryCatch 块的原因是有时 URL 请求会失败,这反过来会停止脚本运行。我想要做的是忽略错误,将循环计数器增加 1 并继续提取。
我设置的 while 循环是(仅供参考 - 长度是指被循环的数据帧的长度):
i <- 1
while(i <= length) {
x_cord <- geocode_area$X[i]
y_cord <- geocode_area$Y[i]
target <- getUrl(x_cord,y_cord)
dat <- fromJSON(target)
geocode_area$Block[i] <- dat$result$geographies$`2010 Census Blocks`[[1]]$BLOCK
print(paste(i/length*100,"% completed",sep=""))
print(dat$result$geographies$`2010 Census Blocks`[[1]]$BLOCK)
i <- i + 1
}
getUrl()函数定义为:
getUrl <- function(x,y) {
root <- "http://geocoding.geo.census.gov/geocoder/geographies/coordinates?"
u <- paste0(root,"x=", x,"&y=", y,"&benchmark=4&vintage=4&format=json")
return(URLencode(u))
}
while 循环的输入 data.frame 看起来像这样(注意我在字符串中抛出了一个错误以测试 tryCatch 是否正常工作):
X Y Block
1 -122.425891675136 37.7745985956747 0
2 -122.42436302145 37.8004143219856 0
3 -122.426995326766 37.8008726327692 0
4 -122.438737622757 37.7715411720578 0
5 abc zsads 0
我尝试了一些 SO 和其他解决方案,但结果似乎无法正常工作。有人可以帮忙吗?
谢谢!
杰克
【问题讨论】:
-
如果您在数据框中包含一些示例参数,这可能会有所帮助。
-
嗨。这是一个非常简单的 data.frame(如果我理解正确的话)。我已经用输入 df 的头部更新了这个问题。谢谢!
-
你为什么使用
while??好像for (i in 1:length) tryCatch({...})正在工作。 -
您好。我更改为 for 循环,现在它工作正常,实际上我可以通过尝试而不是 tryCatch 来逃脱。虽然我仍然很想知道为什么它不适用于 while 循环?谢谢大家,很有用!
-
我在下面详细写了一个答案,并意识到这是给
try而不是tryCatch。哎呀。
标签: r error-handling while-loop try-catch-finally