일기 예보 모델 앙상블의 가변성을 분석하는 데 SOM을 사용하기 위해 노력하고 있습니다. 이렇게하려면 특정 지리적 영역에서 20 개의 앙상블 글로벌 일기 예보 모델에 액세스하십시오. 20 x Nlat x Nlon 행렬을 20 x Nlat * Nlon 행렬로 변환하여 Kohonen 패키지 som 함수에 표시합니다. 그런 다음 som "codebook vector"출력에 액세스하여 위도 위도 그리드로 변환합니다. 그러나이 단계에서 오류 메시지가 표시됩니다.R 자 조직지도 코드북 벡터에 액세스
내가받는 오류 메시지는 다음과 같습니다. '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 $ codes 코드북 벡터에 액세스하는 방법에 대한 도움말과 안내가 제공됩니다.
# 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
글쎄, 지금은 어리석은 생각합니다. 그것은 아마도 제가 시도하지 않은 한 가지 변형 일 것입니다. 이 솔루션은 효과가있었습니다. 신속한 답변과 제안에 감사드립니다. – JFD