2013-07-11 4 views
0

I ve netCDF файл с 3 размерами. Первое измерение - долгота и достигает от 1-464. Второе измерение - широта и достигает от 1-201. Третье измерение - это время и достигает 1-5479.Извлечь определенные значения из netCDF

Теперь я хочу извлечь определенные значения из файла. Я думаю, что с ним можно справиться с начальным аргументом. Я пробовал эту команду.

test = open.ncdf("rr_0.25deg_reg_1980-1994_v8.0.nc") 

data = get.var.ncdf(test,start=c(1:464,1:201,1:365)) 

Но почему-то это не работает. У кого-нибудь есть решение?

Заранее спасибо ...

ответ

1

Похоже, что вы используете ncdf пакет в R. Если вы можете, я рекомендую использовать обновленный ncdf4 пакет, который основан на NetCDF версии UniData в 4 библиотеки (link).

Обратно к проблеме. Я использую пакет ncdf4, но я думаю, что пакет ncdf работает одинаково. Когда вы вызываете функцию get.var.ncdf, вам также необходимо явно указать имя переменной, которую вы хотите извлечь. Я думаю, вы можете получить имена переменных, используя names(test$var).

Так что вам нужно сделать что-то вроде этого:

# Open the nc file 
test = open.ncdf("rr_0.25deg_reg_1980-1994_v8.0.nc") 

# Now get the names of the variables in the nc file 
names(test$var) 

# Get the data from the first variable listed above 
# (May not fit in memory) 
data = get.var.ncdf(test,varid=names(test$var)[1]) 

# If you only want a certain range of data. 
# The following will probably not fit in memory either 
# data = get.var.ncdf(test,varid=names(test$var)[1])[1:464,1:201,1:365] 

Для вашей проблемы, вам нужно будет заменить varid=names(test$var)[1] выше varid='VARIABLE_NAME', где VARIABLE_NAME является переменной вы хотите извлечь.

Надеюсь, что это поможет.

EDIT:

Я установил ncdf пакет на моей системе, и приведенный выше код работает для меня!

+0

Хм, он говорит, что имя моей переменной - «rr». Я положил его так, как data = get.var.ncdf (test, varid = "rr" (test $ var) [1]) [1: 464,1: 201,1: 365] Но он не работает. Я тупой? – burton030

+0

Извините, мой код, должно быть, был немного запутанным - вам не нужна '(test $ var) [1]' part! Попробуйте следующее: 'get.var.ncdf (test, varid =" rr ") [1: 464,1: 201,1: 365]' – ialm

+0

Кроме того, я рекомендую сначала попробовать 'get.var.ncdf (test, varid = "rr") 'без' '[1: 464,1: 201,1: 365]', чтобы убедиться, что ваши измерения ([long, lat, time]) верны! – ialm

0

Вы также можете выполнить извлечение временных меток/дат и мест за пределами R, прежде чем читать его в R для печати и т. Д., Используя CDO. Это имеет то преимущество, что вы можете работать непосредственно в координатном пространстве и непосредственно указывать временные даты или даты:

например.

cdo seldate,20100101,20121031 in.nc out.nc 
cdo sellonlatbox,lon1,lon2,lat1,lat2 in.nc out.nc 
Смежные вопросы