Попробуйте войти в цикл - перейти к следующему г dataRetrieval - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть список, содержащий следующие номера идентификаторов сайта: sitelist <- c("02074500", "02077200", "208111310", "02081500", "02082950")

Я хочу использовать пакет dataRetrieval для сбора дополнительной информации об этих сайтах и ​​сохранения ее в отдельных .csv файлах. Номер сайта "208111310" не существует, поэтому он возвращает ошибку и останавливает код.

Я хочу, чтобы код игнорировал номера сайтов, которые не возвращают данные, и переходит к следующему номеру в sitelist. Я пробовал trycatch несколькими способами, но не могу получить правильный синтаксис. Вот мой для цикла без trycatch.

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 голосов
/ 13 ноября 2018

Вы можете использовать переменную error в функции trycatch , чтобы указать, что произошло при возникновении ошибки, и сохранить возвращаемое значение с помощью оператора << - </strong>.

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