Доступ к 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