Я работаю с данными о населении (18 лет = 18 файлов) и пространственными буферами, которые я создал, 6 категорий расстояний = 6 файлов.
Я создал функцию для извлечения данных о населении и создал for loop
для функции для работы с 18 файлами и создал отдельную функцию для каждого файла расстояния.
Однако это по-прежнему приводит к большому количеству кода и хотелось бы запустить функцию извлечения совокупности по 18 файлам совокупности и, возможно, repeat
или replicate
извлечение совокупности для каждого файла расстояния с помощью "cleaner" код.
Моя функция - повторяется 6 раз с изменением в файле "buffer_100km"
extract_100 <-function(filenames)
{
dat<-velox(filenames) #load file
#clip raster prior to extraction
x_1 <- dat$extract(buffer_100km, fun=function(t) sum(t,na.rm=TRUE)) #extraction from velox pkg
#need to unlist the extracted values and sum the pop den
x_2 <- unlist(lapply(x_1,function(x) if (!is.null(x)) sum(x, na.rm=TRUE) else NA))
#join unlisted values to spatial df
x_3 <- cbind(buffer_100km, x_2)
#renaming column
colnames(x_3)[colnames(x_3)=="x_2"] <- "pop"
#renaming column
colnames(x_3)[colnames(x_3)=="ISO3.1"] <- "ISO3"
#adding a Year column
x_3<-add_column(x_3, Year = regmatches(filenames, regexpr("[0-9].*[0-9]",filenames)), .after = "NAME_0") #add_column function from tibble package
#adding a Distance column
x_3<-add_column(x_3, Distance = "100km", .after = "Year")
#drop geometry to allow for saving in .CSV
x_4 <-st_drop_geometry(x_3)
##saving data as .gpkg
st_write(x_3, dsn = paste0("./Output_pop/Pop_ls",regmatches(filenames, regexpr("[0-9].*[0-9]",filenames)),"_100.gpkg"), delete_dsn =TRUE)
#saving population values into .csv for checking
write.csv(x_4, file = paste0("./Output_pop/Pop_ls",regmatches(filenames, regexpr("[0-9].*[0-9]",filenames)),"_100.csv"))
}
Моя для l oop
for (f in filenames){
print(f)
tic("Population Extraction - 100km") #start timing of extraction function
extract_100(f)
toc(log = TRUE, quiet = TRUE)#closing timing and logging times
}
Мне нужна помощь в написании чище код для этой работы. Я в замешательстве, если мне нужно repeat
, replicate
или nested for loop
?