R - выбор цикла данных массива - PullRequest
0 голосов
/ 04 февраля 2012

Я хочу выбрать данные за июнь, июль и август из массива 3D (ssta_sst, 360 * 180 * 362).

цикл работает, но вывод ssta_winter имеет идентичные значения для ssta_winter[,,i] .seen ниже. Я настроил его как массив (360,180,29).

Я думаю, что проблема в переменной temp, я хочу сначала определить ее как массив, но я не знаю, какой она должна быть (360,180,3) или (360,180,3 * 29) и как сохранить счетчик цикла в temp, когда он переходит к нахождению средней ступени?

ssta_winter = array( data=NA, dim = c(360,180,29))
temp = array( data=NA, dim = c(360,180,3))

for (yr in 1982:2010) {
    temp <- ssta_sst[,,year_sst==yr & (month_sst>=6 & month_sst<=8)]
    for (i in 1:360) {
        for (j in 1:180) {
            ssta_winter[i,j,] <- mean(temp[i,j,])
        }
    }
}

> for (i in 1:29){
+ print(ssta_winter[180,166,i])
+ }
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583

1 Ответ

4 голосов
/ 04 февраля 2012

Это: mean(temp[i,j,]) даст только одно значение, поэтому LHS этого назначения должен быть ssta_winter[i,j], и это означает, что ваши размеры для средних значений зимних (в Южном полушарии) месяцев должны быть только c (360,180 ). (И это объясняет шаблон, которым вы озадачены.)

Если вам нужно одно значение для индекса "год", то вам нужно использовать этот seq_along, примененный к индексу внутри вашего цикла на LHS задания:

for (yr in seq_along(1982:2010 ) ) {
   temp <- ssta_sst[,,year_sst==(1982:2010)[yr] & (month_sst>=6 & month_sst<=8)]
   for (i in 1:360) {
     for (j in 1:180) {
        ssta_winter[i,j,yr] <- mean(temp[i,j,])
                                   }
                     }
                      }
...