尝试捕获以循环-继续下一个r dataRetrieval

时间:2018-11-13 02:35:38

标签: r try-catch

我有一个包含以下站点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")))
}

1 个答案:

答案 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(){})