2016-06-05 7 views
2

Я нашел проблемы для извлечения растровых значений из нескольких данных с координатой долготы и широты с использованием определенной географической области, полученной из шейп-файлов. Вся географическая область находится в разной степени и имеет соответствующий регистр данных координат. Я попытался с помощью функции маски из растрового пакета:Извлечь координаты из нескольких наборов данных R

Первый - нагрузки шейпфайлы, растровые слои и dataframes как список

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) 

Во-вторых - манипулировать шейпфайлы, растровые слои культур и создать маску с географическим расширением, которое я необходимость.

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 
    }) 

В результате объект «p» представляет собой список объектов RasterBrick. Для извлечения значений координаты ячейки из каждых кадров данных, я пытался

value<-lapply(p,extract,y) 

консоль мне возвращает, что:

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

После проверки структуры «р» Я обнаружил, что значения растры не доступны :

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

Однако, я могу извлечь один за одним значениями dataframe в rasterstack с помощью списка операторов:

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

Таким образом, я попытался понять, почему функция lapply для значений не работает.

Спасибо за помощь!

ответ

2

Просто глядя на последней строке кода, я предполагаю, что вы хотите применить ту же функцию (extract) на 1-й элементы nat и y, затем 2-го элементов и т.д. Это то, что делает mapply. Таким образом, ваш код будет выглядеть так:

mapply(extract, nat, y)