在R中循环裁剪形状文件

在R中循环裁剪形状文件,r,gis,R,Gis,我有大量的形状文件,它们代表不同的物种分布,大小各异。我试图通过这些shapefile循环浏览所有这些shapefile,并通过这些shapefile裁剪其他光栅文件(BioClim变量)。我的问题似乎是由于shapefile本身引起的。我试过堆叠,但那不起作用。鉴于我缺乏在循环中使用shapefiles的经验,有人能深入了解为什么下面提供的代码子集不起作用吗 library(raster) library (sp) library(rgeos) library(rgdal) library (

我有大量的
形状文件
,它们代表不同的物种分布,大小各异。我试图通过这些
shapefile
循环浏览所有这些
shapefile,并通过这些
shapefile
裁剪其他光栅文件(BioClim变量)。我的问题似乎是由于
shapefile
本身引起的。我试过堆叠,但那不起作用。鉴于我缺乏在循环中使用
shapefiles
的经验,有人能深入了解为什么下面提供的代码子集不起作用吗

library(raster)
library (sp)
library(rgeos)
library(rgdal)
library (raster)
library (maps)
library (mapproj)
library(sp)
library(maptools)

raster("alt.bil") -> alt
raster("bio_1.bil") -> bio1

shape.files=list.files(path="PathToFolderWithShapefiles", pattern="*.shp", full.names=T, recursive=FALSE)


lapply(shape.files, function(x){
    masking= altc = crop(alt, shape.files)
    bio1 = crop(bio1, shape.files)
setwd("/Volumes/LaCie/LoopTestOutput")
writeRaster(altc, filename="alt.asc", bylayer=T, overwrite=FALSE)
writeRaster(bio1, filename="bio1.asc", bylayer=T, overwrite=FALSE)
})
下面是一组适用于单个特定形状文件的代码。我基本上希望在文件夹中的所有shapefile上循环裁剪函数,并输出裁剪后的光栅文件

require(raster)
library (sp)
install.packages('rgeos',repos="http://www.stats.ox.ac.uk/pub/RWin")
install.packages('rgdal',repos="http://www.stats.ox.ac.uk/pub/RWin")
library (raster)
library (maps)
library (mapproj)
library(sp)
library(maptools)

setwd("PathToGlobalRasterLayers")

raster("alt.bil") -> alt
raster("bio_1.bil") -> bio1

setwd("PathTofolderContainingSpeciesDelimitedShapefiles")#all files necessary for working with shapefiles are here, .shp, .dbf, etc.#
mask <- readShapeSpatial("ReadInSpeciesDelimitedShapefile")

altc = crop(alt, mask)
bio1 = crop(bio1, mask)


setwd("OutputFolderForCroppedFiles")

writeRaster(altc, filename="alt.asc", bylayer=T, overwrite=TRUE)
writeRaster(bio1, filename="bio1.asc", bylayer=T, overwrite=TRUE)
require(光栅)
图书馆(sp)
install.packages('rgeos',repos='http://www.stats.ox.ac.uk/pub/RWin")
install.packages('rgdal',repos='http://www.stats.ox.ac.uk/pub/RWin")
图书馆(光栅)
图书馆(地图)
图书馆(mapproj)
图书馆(sp)
图书馆(地图工具)
setwd(“PathToGlobalRasterLayers”)
光栅(“alt.bil”)->alt
光栅(“bio_1.bil”)->bio1
setwd(“PathToFolderContainingSpeciesDelimitedShapefile”)#处理形状文件所需的所有文件都在这里,.shp、.dbf等#

mask在您的第一个代码块中,您似乎忘记了运行
masking=readShapeSpatial(x)


另外,不要使用
setwd()
,只需将路径放在
filename=
参数中即可。这将使您的代码更加明确和可读

在函数中使用
x
而不是
shape.files
(即列表)?Tensibai,感谢您的快速响应!我将函数更改为反映
x
,而不是
shape.files
,但我收到了以下错误…
在.local(x,y,…)中的错误:无法从参数y获取区段对象
…这就是为什么我认为这个问题与我正在循环特定的形状文件有关。当我在复杂的lappy函数中遇到问题时,我会将它们重写为循环的旧样式,然后逐行处理,以确保每一步都正常工作。你可以试试看,你可以试着用一个简单的可重复的例子来更新你的问题。谢谢你的反馈,Ben!我会给循环写一个镜头!