2017-12-03 16 views
1

大きなラスタデータセットに対してkmeanクラスタ分析を実行するために、brick関数を使用してRasterBrickオブジェクトをbig.matrixオブジェクトに変換しようとしていますが、.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

を使用し、ソリューションの2番目の部分は私の問題を解決していただきありがとうございます。 –

関連する問題