Доступ к R самоорганизующимся кодовым картам векторов

Я работаю над использованием СДЛ для анализа изменчивости ансамблей моделей прогноза погоды. Для этого воспользуйтесь ансамблевой моделью глобального прогноза погоды по конкретному географическому домену. Я преобразую матрицу 20 x Нлат x Нлон в матрицу 20 x Нлат * Нлон и представляю ее в функции сома пакета Кохонена. Затем я пытаюсь получить доступ к выводу "вектора кодовой книги" и преобразовать его обратно в сетку широты и долготы. Однако на этом этапе я получаю сообщение об ошибке.

Я получаю сообщение об ошибке: "Ошибка в var.som$codes[i, ]: неверное количество измерений". В этом случае var.som является объектом Кохонена. Я зацикливаюсь с N = 1:Nsom, где Nsom - количество "карт", указанных в вызове функции som.

Данные атрибута для var.som указывают, что размер списка var.som $ codes равен "num [1:4, 1:500]", предлагая два измерения, поэтому я считаю, что мой код должен работать. Я пробовал разные перестановки для доступа к данным списка, но ни одна из них не работает. То есть var.som$codes[1] и var.som$codes[[1]], но они не решают проблему. var.som$codes[1,1] возвращает NULL.

В приведенном ниже сценарии R я сократил процесс только до основных этапов. Генератор случайных чисел заменяет доступ к данным модели погоды. В коде я указываю место, где произошла ошибка, и что это за сообщение об ошибке.

Приветствуется помощь и руководство по доступу к кодам var.som $ по одному вектору кодовой книги за раз.

# An R script that provides an example of using a Self Organizing Map to calucate a SOM from latitude/longitude
# data.  An error occurs fails accessing the SOM data vector codes.   

library("kohonen")

# Set a few parameters 
Nlon <- 20  # Number of longitude points
Nlat <- 25  # Number of latitude points
Nens <- 20  # number of ensemble members
Nsom <- 4   # number of "maps" in SOM

t2m.en <- as.list(rep(0,Nens))


# Generate Nlon * Nlat random numbers for Nens ensembles 
for (i in 1:Nens)  {
        t2m.en[[i]] <- runif(Nlon*Nlat, -5, 5)
  }

#array containing ensemble data
t2m.ens <- array(unlist(t2m.en),dim=c(20,Nlon,Nlat))
t2m.vec <- matrix(t2m.ens, nrow=20, ncol=Nlat*Nlon, byrow=TRUE)

# remove the column mean from each column of data (i.e. each grid point)
t2m.scaled <- apply(t2m.vec, 2, scale, scale=FALSE, center=TRUE) 

rm(t2m.en)
#  LOOP OVER THE VARIABLES TO PLOT

    # Conduct the SOM analysis
var.som <- som(t2m.scaled, grid = somgrid(2,2, "rectangular"))#, keep.data=TRUE))

var.vecc = mat.or.vec(Nlat*Nlon, Nsom)

#populate var.vecc with the SOM output maps

for (i in 1:Nsom) {
        print(i)
        ## THIS IS WHERE THE ERROR IS
          var.vecc[,i] <- var.som$codes[i,]
        ## The Error Message is: 
        ## Error in var.som$codes[i, ] : incorrect number of dimensions  
}
#var.som$codes[1]
# Plot data from var.vecc on a map  

1 ответ

Пытаться: var.vecc[,i]<-var.som$codes[[1]][i,]

Другие вопросы по тегам