У меня проблемы с извлечением данных из файлов данных NetCDF с использованием RNetCDF. Каждый файл данных имеет 3 измерения (долгота, широта и дата) и 3 переменные (широта, долгота и климатическая переменная). Существует четыре набора данных, каждый с различной климатической переменной.
Вот некоторые из выводов из print.nc (p8m.tmax) для ясности. Другие наборы данных идентичны, за исключением конкретной климатической переменной.
dimensions:
month = UNLIMITED ; // (1368 currently)
lat = 3105 ;
lon = 7025 ;
variables:
float lat(lat) ;
lat:long_name = "latitude" ;
lat:standard_name = "latitude" ;
lat:units = "degrees_north" ;
float lon(lon) ;
lon:long_name = "longitude" ;
lon:standard_name = "longitude" ;
lon:units = "degrees_east" ;
short tmax(lon, lat, month) ;
tmax:missing_value = -9999 ;
tmax:_FillValue = -9999 ;
tmax:units = "degree_celsius" ;
tmax:scale_factor = 0.01 ;
tmax:valid_min = -5000 ;
tmax:valid_max = 6000 ;
Я получаю поведение, которое не понимаю, когда использую функцию var.get.nc из пакета RNetCDF.
Например, когда я пытаюсь извлечь 82 значения, начиная с stval, из данных максимальной температуры (p8m.tmax <- open.nc (tmaxdataset.nc)) с помощью </p>
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,82))
(где lon_val и lat_val указывают местоположение в наборе данных интересующих меня координат, а stval - это stval, для которого установлено (time_vec == 200201), что в данном случае равняется 1285.) Я получаю
Ошибка: неверный аргумент
Но после успешного извлечения 80 и 81 значений
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,80))
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,81))
работает команда с 82:
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,82))
[1] 444 866 1063 ... [output snipped]
Та же проблема возникает в идентично структурированном файле tmin, но на 36 вместо 82:
> var.get.nc(p8m.tmin,'tmin', start=c(lon_val, lat_val, stval),count=c(1,1,36))
выдает ошибку: неверный аргумент
Но после повторения со счетами 30, 31 и т. Д.
> var.get.nc(p8m.tmin,'tmin', start=c(lon_val, lat_val, stval), count=c(1,1,36))
работает.
В этих примерах создается впечатление, что функция завершается с ошибкой при последнем подсчете, но на самом деле это не так. В первом примере var.get.nc выдал Error: Недопустимый аргумент после того, как я запросил 84 значения. Затем я сократил число ошибок до 82-го числа, изменив начальную точку в наборе данных и запросив только 1 значение за раз. Конкретное число, в котором возникает проблема, также варьируется. Я могу закрыть и снова открыть набор данных, и проблема возникнет в другом месте.
В приведенных выше конкретных примерах lon_val и lat_val равны 1595 и 1751, соответственно, определяя местоположение в наборе данных вдоль широт и долгот для интересующей меня широты и долготы. 1595-я широта и 1751-я долгота не являются проблема, однако. Проблема возникает со всеми другими широтами и долготами, которые я пробовал.
Изменение начального местоположения в наборе данных по измерению климатической переменной (stval) и / или указание его другим (как число в команде вместо объекта stval) также не решает проблему.
Эта проблема не всегда возникает. Я могу запустить один и тот же код три раза подряд (очистить все объекты между прогонами) и каждый раз получать разные результаты. Первый прогон может захлебнуться 7-й записью, которую я пытаюсь получить, второй может работать нормально, а третий прогон может захлебнуться 83-й записью. Я совершенно сбит с толку таким непоследовательным поведением.
Функция open.nc также перестала работать с той же ошибкой: неверный аргумент. Как и проблемы var.get.nc, это также происходит непоследовательно.
Кто-нибудь знает, что вызывает первоначальный сбой при извлечении переменной? И как я мог бы предотвратить это? Может быть, это связано с размером файлов данных (~ 60 ГБ каждый) и / или с тем, что я обращаюсь к ним через сетевые диски?
Это также спрашивали здесь:
https://stat.ethz.ch/pipermail/r-help/2011-June/281233.html
> sessionInfo()
R version 2.13.0 (2011-04-13)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] reshape_0.8.4 plyr_1.5.2 RNetCDF_1.5.2-2
loaded via a namespace (and not attached):
[1] tools_2.13.0