2016-06-05 14 views
2

Ich habe Probleme gefunden, Rasterwerte aus mehreren Datenrahmen mit Koordinaten von Längen- und Breitengrad zu extrahieren, wobei eine bestimmte geografische Region aus Shapefiles verwendet wird. Alle geographischen Regionen sind in unterschiedlichem Ausmaß und haben einen entsprechenden Vorkommensdatenrahmen von Koordinatendaten. Ich versuchte Maskenfunktion von Raster-Paket mit:Koordinaten aus mehreren Datensätzen extrahieren R

Erste - Last Shape-Dateien, Rasterlayer und Datenrahmen als Liste

shp<-list.files(pattern = "shp") 
shape<-lapply(shp,readShapeSpatial,proj4string=CRS("+proj=longlat +ellps=WGS84")) 

rastFiles<-list.files(pattern="bil") #List of bioclimatic variables 
layers<-stack(rastFiles) 

oco<-list.files(pattern = ".csv") 
oco<-lapply(oco,read.table,header=T,sep = ",") 
oco<-lapply(oco,"[", c(6,5)) 
y<-lapply(oco, na.omit) 

Second - manipuliert Shape-Dateien, Ernte Rasterebene und eine Maske mit geografischer Erweiterung erstellen, die ich brauchen.

p<- lapply(shape, function(i) { 
    i[[email protected]$ORIGIN==1,] #specifying the region of shapefile 
    p1<-SpatialPolygons([email protected],[email protected]) #transform specific region in shapefile 
    nr<-crop(layers,extent(p1)) #crop raster stack with polygons extent 
    m<-mask(nr,p1) #raster mask using poligon as model 
    }) 

Als Ergebnis ist das Objekt "p" eine Liste mit RasterBrick-Objekten. Für Extrakt koordiniert die Zellenwerte von jedem Datenrahmen, habe ich versucht,

value<-lapply(p,extract,y) 

die Konsole mir zurück, dass:

Error in round(y) : non-numeric argument to mathematical function 

Nach der Struktur der „p“ Überprüfung fand ich, dass die Rasterwerte sind nicht verfügbar :

:

.. [email protected] data :Formal class '.MultipleRasterData' [package "raster"] with 14 slots 
.. .. .. [email protected] values : int [1:99660, 1:20] NA NA NA NA NA NA NA NA NA NA ... 

Allerdings kann ich eins nach dem anderen Datenrahmen Werte in einer rasterstack mit Liste Operatoren extrahieren

extract(nat[[1]],y[[1]]) 

Auf diese Weise habe ich gesucht, um zu verstehen, warum meine Lapply-Funktion für Werte nicht funktioniert.

Vielen Dank für Ihre Hilfe!

Antwort

2

Gerade bei Ihrer letzten Zeile Code suchen, ich nehme an, Sie die gleiche Funktion (extract) am 1. Elemente nat und y, dann 2. Elemente beider anwenden möchten, etc. Dies ist, was mapply tut. So wird Ihr Code wie folgt aussehen:

mapply(extract, nat, y) 
Verwandte Themen