Im пытается перебрать папки в каталоге при чтении и назначении файлов переменным в R
. Я знаю, что в этой теме уже много тем. Однако я не смог найти решение моей проблемы. Я новичок в R, так голый со мной, пожалуйста.зацикливание по папкам при выполнении задания
Файлы, которые я хочу назначить переменным, являются shapefiles
, поэтому я использую функцию readOGR
из пакета rgdal
. Цель состоит в том, чтобы позже объединить все шейп-файлы, принадлежащие определенному виду. Иерархия/структура каталога: type1
>species
>ids
. shapefiles
выглядеть id.shp
и т.д.
Пример шейп можно загрузить here и here
#code
setwd("~/type1/")
#Extract ids belonging to $species. Later use in readOCR function
sp_id <- function(species){
wd = "~/type1/"
list_shp <- list.files(path=paste(wd,species,sep='/'), full.names = F, recursive = F, include.dirs = F)
vec <- character()
for (shp in list_shp){
y <- unlist(strsplit(shp, '\\.', perl=T))
vec <- unique(c(vec,y[1]))
}
#"1905" "4279"
#Extract dirs for where to perform readOCR function
list_dir <- list.dirs(path=paste(wd,species,sep='/'), full.names = F, recursive = F)
for (id in list_dir){
setwd(id)
print(getwd())
}
#"~/type1/speciesX1/1905"
#"~/type1/speciesX1/4279"
for (i in vec){
assign(paste("", i, sep=""), readOGR(".", i))
break
}
}
sp_id('speciesX1')
[1] "~/type1/speciesX1/1905"
OGR data source with driver: ESRI Shapefile
Source: ".", layer: "1905"
with 10 features and 3 fields
Feature type: wkbPolygon with 2 dimensions
[1] "~/type1/speciesX1/4279"
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer
Проблема заключается в том, что код выполняется только для readOGR
один shapefile
в одном из dirs
, кажется, снова изменить реж но не выполняет последние readOGR
.
Любые указатели будут высоко оценены.
Удивительно, спасибо! Не забывайте чаще использовать функции «apply». Только для случая обучения, можете ли вы сказать мне, где моя функция нарушена? –
1. Ваше имя функции 'sp_id' отличается от того, что вы вызываете позже (' sp_mrgid ('speciesX1') ') 2.' setwd (id) 'в строке 25 приведет к ошибке (насколько я видел это , вы никогда не устанавливаете wd в 'species', какие подпапки вы пытаетесь получить. Это были просто быстрое наблюдение, не пытались отлаживать его всерьез. – jlehtoma
Вот [gist] (https: //gist.github .com/jlehtoma/7924643), демонстрируя слияние. – jlehtoma