从多个数据集 R 中提取坐标
Extract coordinates from multiple datasets R
我发现使用从 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)
控制台 returns 我说:
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 值函数不起作用。
感谢您的帮助!
看看你的最后一行代码,我假设你想对 nat
和 y
的第一个元素应用相同的函数 (extract
),然后是第二个两者的元素,等等。这就是 mapply
所做的。因此,您的代码将如下所示:
mapply(extract, nat, y)
我发现使用从 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)
控制台 returns 我说:
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 值函数不起作用。
感谢您的帮助!
看看你的最后一行代码,我假设你想对 nat
和 y
的第一个元素应用相同的函数 (extract
),然后是第二个两者的元素,等等。这就是 mapply
所做的。因此,您的代码将如下所示:
mapply(extract, nat, y)