У меня есть большое количество shapefiles
, все различные размеры, так как они представляют различные виды распределений. Я пытаюсь пропустить все эти shapefiles
и обрезать другие растровые файлы (переменные BioClim) этими shapefiles
. Кажется, что моя проблема возникает из-за самих shapefiles
. Я попробовал укладку, и это не работает. Учитывая мой недостаток опыта работы с shapefiles
в цикле, может ли кто-нибудь объяснить, почему поднабор кода, приведенный ниже, не будет работать?Обрезка шейп-фигур в петле в R
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)
})
Ниже приведен код, который работает для одного, определенного, шейп-файла. Я хотел бы, как бы цитировать функцию обрезки во всех шейп-файлах внутри папки и выводить обрезанный растровый файл.
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)
использовать 'x' вместо' shape.files' (который есть список) в вашей функции? – Tensibai
Tensibai, спасибо за ваш быстрый ответ! Я изменил функцию, чтобы отразить 'x', а не' shape.files', но я получил следующую ошибку ... 'Ошибка в .local (x, y, ...): Не удается получить объект Extent из аргумента y' .... вот почему я думаю, что эта проблема имеет отношение к тому, что я делаю петлевые шейп-файлы конкретно – Sally
Когда у меня возникают проблемы со сложными функциями lapply, я переписываю их как статические стили для циклов, а затем прорабатываю их по очереди, чтобы каждый шаг работал. Вы можете попробовать это, и вы можете попробовать обновить свой вопрос с помощью простого воспроизводимого примера того, что вы пытаетесь сделать. – Ben