2017-12-19 5 views
1

일기 예보 모델 앙상블의 가변성을 분석하는 데 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 

답변

0

시도 : var.vecc[,i]<-var.som$codes[[1]][i,]

+0

글쎄, 지금은 어리석은 생각합니다. 그것은 아마도 제가 시도하지 않은 한 가지 변형 일 것입니다. 이 솔루션은 효과가있었습니다. 신속한 답변과 제안에 감사드립니다. – JFD