我试图用R中的while循环实现tryCatch,但一直在遇到问题。我试图实现一些建议的解决方案(围绕循环),但没有成功。在R中使用tryCatch与while循环
本质上来说,我是用R来查询一个API,并通过一些相关的参数(精确的经度和纬度)进行循环。我需要tryCatch块的原因是,有时URL请求会失败,从而导致脚本停止运行。我想要做的就是忽略错误,将循环计数器增加1并继续提取。
while循环我已成立是(FYI - 长度是指绕环数据帧的长度上):
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))
}
的输入data.frame到while循环看起来是这样的(注意我已经抛出字符串来模拟错误来测试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和其他解决方案,但结果似乎没有正常工作。谁能帮忙?
谢谢!
插孔
如果您在数据框中包含一些示例参数,它可能会有帮助。 – TARehman
嗨。这是一个非常简单的数据框架(如果我正确理解你的话)。我已经用输入df的头部更新了这个问题。谢谢! –
为什么你使用'while'?看起来像'for(i in 1:length)tryCatch({...})'正在做工作。 – Marek