我有一个包含以下站点ID号的列表:
sitelist <- c("02074500", "02077200", "208111310", "02081500", "02082950")
我想使用dataRetrieval包来收集有关这些站点的其他信息,并将其保存到单独的.csv
文件中。站点编号"208111310"
不存在,因此它返回错误并停止代码。
我希望代码忽略不返回数据的站点编号,并继续到sitelist
中的下一个编号。
我尝试了几种方法进行trycatch,但是无法获得正确的语法。这是我的没有trycatch的for循环。
for (i in sitelist){
test_gage <- readNWISdv(siteNumbers = i,
parameterCd = pCode)
df = test_gage
df = subset(df, select= c(site_no, Date, X_00060_00003))
names(df)[3] <- c("flow in m3/s")
df$Year <- as.character(year(df$Date))
write.csv(df, paste0("./gage_flow/",i,".csv"), row.names = F)
rm(list=setdiff(ls(),c("sitelist", "pCode")))
}
答案 0 :(得分:1)
您可以在函数 trycatch 中使用变量 error 来指定发生错误时发生的情况,并使用运算符 <<-强>。
for (i in sitelist){
test_gage <- NULL
trycatch(error=function(message){
test_gage <<- readNWISdv(siteNumbers = i,parameterCd = pCode)
}
df = test_gage
df = subset(df, select= c(site_no, Date, X_00060_00003))
names(df)[3] <- c("flow in m3/s")
df$Year <- as.character(year(df$Date)) write.csv(df, paste0("./gage_flow/",i,".csv"), row.names = F)
rm(list=setdiff(ls(),c("sitelist", "pCode")))
}
如果您想捕获警告,也只需给trycatch添加第二个参数。
trycatch(error=function(){},warning=function(){})