2017-04-16 2 views
2

J'utilise la nouvelle fonction d'extraction Velox pour accélérer l'extraction de trame par des fichiers de formes.Fonction pour renvoyer des valeurs (velox raster)

L'ancienne fonction extrait du paquet de trame par défaut renvoyé une liste de valeurs de cellules, par exemple lorsque vous utilisez le format ci-dessous:

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

Le nouveau paquet Velox nécessite un amusement = l'argument et je ne peux pas pour la vie de moi l'obtenir pour retourner les valeurs:

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) 

Je m'amuse = somme, fun = moyen de travailler très bien. Quoi de mieux avec des valeurs? Suis-je en train de manquer quelque chose d'évident à propos d'un vecteur numérique et de renvoyer une liste de valeurs (ce que je pense être le cas le plus probable)?

Merci!

+0

De 'extract': "fun: (...) La fonction doit prendre un seul vecteur numérique comme argument et renvoie une valeur unique". De '? Value':" Valeur: vecteur ou matrice de valeurs raster ". Cela pourrait-il être le problème? – AkselA

+0

Que diriez-vous de 'fun = function (x) {x}' ou 'fun = as.numeric'? –

+0

Ni fun = fonction (x) {x} ni fun = as.numeric fonctionne. Il a cependant une erreur différente, "Erreur dans out [p, k] <- fun (valmat [, k])". Il me semble que la sortie vectorielle de l'extrait velox est un vecteur unique de toutes les valeurs, et il peut essayer de fusionner cela sur la matrice de raster velox du seul nombre de polygones dans le fichier de formes. Ainsi, les valeurs seraient bien plus longues d'un vecteur qu'une colonne de la matrice velox qui pourrait provoquer cette erreur. Je ne suis pas sûr de la façon de forcer un nouveau vecteur d'une longueur différente puisque la documentation d'extrait pour velox a seulement la méthode $ d'extraction. –

Répondre

0

Essayez simplement cet extrait

vx.raster$crop(shapefile). 
1

La version de développement de Velox (sur github) permet maintenant de retour des valeurs de trame 'brutes' d'une requête VeloxRaster_extract. Réglez simplement l'argument fun sur NULL.

Voici un exemple:

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....