Я использую цикл for в R для чтения файла netCDF из папки и извлечения значений для заданного списка долготы и широты. Вроде работает, кроме ОДНОЙ ПРОБЛЕМЫ. Когда цикл возвращает значения по дате, он создает с 29 по 31 января после 28 февраля. Я хочу, как обычно, 1 марта после 28 или 29 февраля (для високосного года). Вот мой код R:
# given latitude, longitude list
sb1 <- data.frame(longitude=1:10,latitude =1:10)
# Extracting zonal or sub-basin average rainfall from netCDF file
sb1_r <- c()
date <- c()
rain_month <- c()
rain_year <- c()
for (year in 1998:1998){
for (month in 1:3){
for (day in seq_along(1:31)){
FileName <- paste('3B42_daily',year,sprintf("%02d",month),sprintf("%02d", day),'7.SUB.nc', sep='.')
if (!file.exists(FileName)){
next
} else {
File <- nc_open(FileName)
rain <- ncvar_get(File, 'r')
sb1_r[day] <- mean(apply(sb1,1,function(x)rain[x[1],x[2]]),na.rm = TRUE)
date[day] <- paste(year,sprintf("%02d", month),sprintf("%02d", day),sep='-')
rain_month <- data.frame(date,sb1_r)
nc_close(File)
}
}
rain_year <- rbind(rain_year,rain_month)
}
}
Вы можете найти ежедневные данные netCDF за три месяца по этой ссылке: https://drive.google.com/open?id=0B8rqKaYt0VEaMWVGc1gzdXI1U28
for (day in seq_along(1:31))
для января, февраля и марта. Но в феврале всего 28 дней. Может в этом проблема? Если да, вам нужно настроить цикл. - person dataanalyst   schedule 01.08.2016