r - 从多个数据集 R 中提取坐标

标签 r lapply shapefile r-raster

我发现使用从 shapefile 获得的特定地理区域从多个数据帧中提取具有经度和纬度坐标的栅格值时存在问题。所有的地理区域都在不同的范围内,并且都有相应的坐标数据出现数据框。 我尝试使用光栅包中的蒙版函数:

首先 - 将 shapefile、栅格图层和数据帧加载为列表

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)

第二 - 操作 shapefile、裁剪栅格图层并创建具有我需要的地理扩展的蒙版。

p<- lapply(shape, function(i) {
    i[i@data$ORIGIN==1,] #specifying the region of shapefile
    p1<-SpatialPolygons(i@polygons,proj4string=i@proj4string) #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

检查“p”的结构后,我发现栅格值不可用:

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

但是,我可以使用列表运算符在光栅堆栈中一一提取数据帧值:

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

通过这种方式,我试图理解为什么我的值的 lapply 函数不起作用。

感谢您的帮助!

最佳答案

只要看看你的最后一行代码,我假设你想在 naty 的第一个元素上应用相同的函数(extract) ,然后是两者的第二个元素,等等。这就是 mapply 所做的。因此,您的代码将如下所示:

mapply(extract, nat, y)

关于r - 从多个数据集 R 中提取坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37638154/

相关文章:

javascript - 使用 OpenLayers 将数据保存到 Shapefile

download - 为什么我不能让 st_read 从压缩文件中打开 shapefile? (如果保存在本地 Onedrive 文件夹中但未在 R 中解压缩,则会读取 map )

python-3.x - 提取几何(形状)内的数据

r - CAPM.jensenAlpha 不适用于 Ubuntu

linux - 如何将一行分成多行?

R - file.copy 函数

替换结构相同的 S4 对象列表中每个元素中 @slot 的值

r - 什么是英寸?设置箭头的长度

r - 根据两列的条件求平均值

r - 使用lapply中的特定列计算多个回归分析