2017-04-16 8 views
2

私は新しいvelox抽出関数を使って、シェープファイルによるラスタ抽出を高速化しています。値を返す関数(veloxラスタ)

val.list <- raster::extract(raster, shapefile) 

新しいVelox社のパッケージが楽しい=引数を必要とし、私がすることはできません。デフォルトで

古いラスタパッケージの抽出機能を使用すると、以下の形式を使用する場合、たとえば、セル値のリストを返さ私の人生は値を返すようになります:

vx.raster <- velox(raster) 
vx.vals <- vx.raster$extract(shapefile, fun=??????) 

I have tried: 
fun=values (returns error Error during wrapup: unable to find an inherited method for function 'values' for signature 'numeric' 
fun=function(x){values(x)} (same error as above) 

私は楽しい=合計、楽しい=うまく動作することを意味します。値とは何ですか?私はちょうど数値ベクトルと明示的な値のリスト(私は感じる最も可能性の高いケース)を明らかに何かが不足していますか?

ありがとうございました!

+0

'extract'から:?「楽しさ:(...)関数は、引数として単一の数値ベクトルを取り、単一の値を返す必要があります」。 '?value':"値:ラスタ値のベクトルまたは行列 "。それが問題だろうか? – AkselA

+0

'fun = function(x){x}'や 'fun = as.numeric'はどうですか? –

+0

fun = function(x){x}もfun = as.numericも機能しません。しかし、それは "Error in out [p、k] < - fun(valmat [、k])"という異なるエラーがあります。 velox抽出の数値ベクトル出力がすべての値の単一ベクトルであると思われ、これをshapefileの多角形の数だけのveloxラスタ行列にマージしようとしている可能性があります。したがって、値は、このエラーの原因となるかもしれないvelox行列の列よりもはるかにベクトルより長くなります。 veloxの解凍文書には抽出する$メソッドしかないので、別の長さの新しいベクトルを強制する方法がわかりません。 –

答えて

0

単に(githubの上の)Velox社の開発バージョンは、今VeloxRaster_extractクエリから「生の」ラスタ値を返すことができます

vx.raster$crop(shapefile). 
1

このスニペットを試してみてください。 fun引数をNULLに設定するだけです。

ここでは例です:

library(devtools) 
install_github('hunzikp/velox') 
library(velox) 

## Make VeloxRaster with two bands 
set.seed(0) 
mat1 <- matrix(rnorm(100), 10, 10) 
mat2 <- matrix(rnorm(100), 10, 10) 
vx <- velox(list(mat1, mat2), extent=c(0,1,0,1), res=c(0.1,0.1), 
     crs="+proj=longlat +datum=WGS84 +no_defs") 

## Make SpatialPolygons 
library(sp) 
library(rgeos) 
coord <- cbind(0.5, 0.5) 
spoint <- SpatialPoints(coords=coord) 
spols <- gBuffer(spgeom=spoint, width=0.5) 

## Extract 
vx$extract(sp=spols, fun=NULL)$buffer 
#    [,1]  [,2] 
# [1,] 1.27242932 0.04658030 
# [2,] 0.41464143 -1.13038578 
# [3,] -1.53995004 0.57671878 
# etc....