Как составлять отдельные растровые слои из файлов, содержащихся в отдельных подпапках в R? - PullRequest
0 голосов
/ 31 мая 2018

Я работаю с растровыми слоями.У меня есть 10 подпапок в родительской папке.Каждая из подпапок содержит сотни растров.Я хотел бы применить скрипт для каждой из подпапок и создать несколько стеков для каждой из моих подпапок.

#List all my subfolders in my parent folder
list_dirs<- list.dirs(path/parentfolder/, recursive = F) 

for (i in list_dir){

# set the working directory to the subfolder i
setwd(i) 

# List all the files with a certain pattern in the subfolder i
s<- list.files(path=setwd(i), pattern = "cool", recursive=F)

# I do not see how I can create a stack for each of my subfolders here.
#I should have an index i somewhere in the last line.

ss<- stack(s)

}

В качестве конечного результата я хотел бы иметь 10 стеков, соответствующих каждому из моих 10вложенные папки.Я новичок в R. Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

A lapply вариант, если вы предпочитаете, но на самом деле это просто другая версия ответа dww:

list_dirs <- list.dirs("path/parentfolder/", recursive = F)

names(list_dirs) <- basename(list_dirs)

raster.list <- lapply(list_dirs, function(dir) {
  stack(list.files(dir, pattern = "cool", full.names = T, recursive = F))
})
0 голосов
/ 31 мая 2018

Обычно вы должны использовать списки для такого рода вещей.Вы можете добавить каждый стек в качестве элемента списка в цикле.

stack.list <- list()
for (i in 1:length(list_dirs)){
  s <- list.files(path=list_dirs[i], pattern = "cool", recursive=F, full.names = TRUE)
  stack.list[[i]] <- stack(s)
  }

Или, немного лучше, если вы хотите отслеживать, какой элемент списка соответствует какой папке, вы можете использовать:

stack.list[[basename(list_dirs)[i]]] <- stack(s)
...