这是一个相关的问题: Better way to optimize my code for getting NOAA climate data
但是由于数据集的不同以及完全不同的数据集。循环格式我认为开始一个新问题是最好的。基本上我试图从NOAA的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,可以简化和优化&#39;循环,但如何优化更复杂的&#39;为&#39;像这样循环(包含if / else)利用这些包或任何其他方法?
我想补充的最后一件事是,当我运行循环时,我得到一个错误/警告:此外:警告消息: 错误:(429) - 此令牌已达到每秒5的临时请求限制。
这是因为它们只允许您每秒发出5个请求,这意味着我从rnoaa获得的可能性将不完整。有没有办法添加某种时间延迟,以便循环每秒运行不超过5次?
谢谢!