我正在努力使用SOM来帮助分析天气预报模型集合的可变性。为此,请访问特定地理域上的20个集合全球天气预报模型。我将20 x Nlat x Nlon矩阵转换为20 x Nlat * Nlon矩阵,将其呈现给Kohonen软件包som函数。然后我寻求访问som"码本矢量"输出并将其转换回纬度经度网格。但是,我在此步骤收到错误消息。
我收到的错误消息是: ' var.som $ codes [i,]中的错误:维度数不正确。'在这种情况下,var.som是Kohonen对象。我从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
答案 0 :(得分:0)
尝试:var.vecc[,i]<-var.som$codes[[1]][i,]