2017-12-03 13 views
1

대형 래스터 데이터 집합에 대해 kmean 클러스터 분석을 수행하기 위해 RasterBrick 개체를 개체로 변환하려고 시도하지만 brick 함수를 사용하지만 .grd 파일을 다시 읽을 때 R 모든 정보가 손실됩니다.RasterBrick에서 big.matrix 개체 생성

library(raster) 
library(bigmemory) 
library(biganalytics) 

#initialize raster 
one <- raster(matrix(rnorm(400), 20, 20)) 
two <- raster(matrix(rnorm(400), 20, 20)) 
three <- raster(matrix(rnorm(400), 20, 20)) 

#save brick object as .grd file 
brick(one, two, three, filename = "test") 

#read .grd file in as big.matrix 
big_matrix <- as.big.matrix("test.grd", type = "double") 

#check dimensions 
dim(big_matrix) 

#perform kmeans 
bigkmeans(big_matrix, 3) 

내가 볼 수하여 .grd 내 디렉토리에 .gri 파일,하지만 난 다시 읽을 방법이나 bigkmean 기능에 .grd 파일을 공급하는 방법을 알아낼 수 없습니다. 내가 어떻게 이럴 수 있니? 파일이 크지 않으면

답변

3

예 데이터

library(raster) 
library(bigmemory) 

b <- brick(system.file("external/rlogo.grd", package="raster")) 

, 당신은 그렇지

x <- as.big.matrix(values(b)) 

할 수있는, 여기 당신이 사용할 수있는 기능입니다.

r2bm <- function(from, filename="") { 
    b <- big.matrix(ncell(from), nlayers(from), backingfile=filename) 
    nc <- ncol(from) 
    tr <- blockSize(from) 
    for (i in 1:tr$n) { 
     start <- ((tr$row[i]-1) * nc) + 1 
     end <- start + (tr$nrows[i] * nc) - 1 
     b[start:end, ] <- getValues(from, row=tr$row[i], nrows=tr$nrows[i]) 
    } 
    b 
} 

는 이제

y <- r2bm(b, "bg.dat") 
+0

감사합니다 솔루션의 두 번째 부분은 내 문제를 해결하십시오. –