Лучшая оптимизация для RNOAA GSOM для цикла

Это связанный с этим вопрос: лучший способ оптимизировать мой код для получения климатических данных NOAA

Но из-за различного набора данных, а также совершенно другого формата цикла for, я думаю, что лучше начать новый вопрос. По сути, я пытаюсь получить данные из набора данных GSOM НОАА (в частности, градусные дни, осадки, температура, все среднемесячные значения). Мне нужны эти данные с 2005 по 2015 год, и я использую пакет rnoaa для доступа и загрузки информации.

Пока что новый цикл такой:

    library(rnoaa)
options(noaakey = "your api code key here")
states<-ncdc_locs(locationcategoryid='ST', limit=52)
locat <- states$data$id[states$data$name=="Florida"]
month<-seq.Date(as.Date("2005/1/1"),as.Date("2015/12/31"), by="month" )
vmonth<-as.character(month)
#### Precipitation
datatype <- "PRCP"
dataPRCP <- array(0,c(0,length(vmonth)+3))
colnames(dataPRCP) <- c("Station","Latitude", "Longitude", vmonth)
emptyrow<-rep(NA,length(vmonth)+3)
for (i in 1:length(vmonth)){ 
  my.query<-ncdc(datasetid='GSOM',datatypeid = datatype, locationid = location, startdate = vmonth[i], enddate = vmonth[i], limit = 1000)

  for (j in 1:length(my.query$data$value)){
    if(my.query$data$station[j] %in%  dataPRCP[,1]){
      rowNum<-which(dataPRCP[,1]==my.query$data$station[j])
      dataPRCP[rowNum,i+3]<-my.query$data$value[j]
    } else {
      dataPRCP<-rbind(dataPRCP,emptyrow)
      rowNum<-length(dataPRCP[,1])
      location <- ncdc_stations(stationid = my.query$data$station[j])
      dataPRCP[rowNum,1]<-my.query$data$station[j]
      dataPRCP[rowNum,2]<-location$data$latitude
      dataPRCP[rowNum,3]<-location$data$longitude
      dataPRCP[rowNum,i+3]<-my.query$data$value[j]
    }
  }}
rownames(dataPRCP) <- c(1:length(dataPRCP[,1]))

Ранее я был проинформирован о других пакетах, таких как dplyer или purrr, которые могут оптимизировать и оптимизировать циклы 'for', но как можно оптимизировать более сложный цикл 'for', подобный этому (содержащийся в if/else), используя эти пакеты или любые другие средства?

И последнее, что я хотел бы добавить, это то, что когда я запускаю цикл, я получаю сообщение об ошибке / предупреждение: Дополнительно: Предупреждающее сообщение: Ошибка: (429) - этот токен достиг своего временного лимита запроса 5 в секунду.

Это потому, что они позволяют вам делать только 5 запросов в секунду, что означает, что потенциально то, что я получаю от rnoaa, будет неполным. Есть ли способ добавить некоторую задержку, чтобы цикл не выполнялся более 5 раз в секунду?

Спасибо!

0 ответов

Другие вопросы по тегам