Следующее должно немного привести в порядок ваш код:
#myfilepaths <- paste0(rep(getwd(),6))
myfilepaths <- c(paste0('J:\\GBD2017\\Venezuela\\xlsx\\',2006:2011))
allterms <- c("test","Casos según Entidades|MALARIA8","Distrito Capital10|hasta", "NA12", "hasta la semana|NA12|NA16|Entidades Federales16", "NA19|Cuadro|Malaria16")
length(myfilepaths)==length(allterms)
searchtree <- data.frame(myfilepaths, allterms, stringsAsFactors = F)
result <- apply(searchtree, 1, function(x) list.files(x["myfilepaths"], pattern=x["allterms"], recursive = FALSE, full.names = FALSE, ignore.case = TRUE))
Идея состоит в том, чтобы: 1) создать список папок, вставив диапазон года в корень, затем поместить все комбинации путей ишаблоны для поиска в аккуратном фрейме данных и 2) для применения функции list.files к этому df.Это дает вам список из 6 элементов.
> result
[[1]]
[1] "ctest.R" "ExcelTest.csv" "test.csv" "test.xls"
[[2]]
character(0)
[[3]]
character(0)
[[4]]
character(0)
[[5]]
character(0)
[[6]]
character(0)
Или вы можете также использовать цикл, подобный так, получая в точности то же самое:
result <- list()
for(i in 1:length(allterms)) {
result[[i]] <- list.files(searchtree[i,"myfilepaths"], pattern=searchtree[i,"allterms"], recursive = FALSE, full.names = FALSE, ignore.case = TRUE)
}
result
edit: если у вас более одногошаблон для каждой папки, например, если вы хотите выполнить поиск в папке 2006 по обоим "test"
и "Casos según Entidades|MALARIA8"
, вы должны создать searchtree
data.frame следующим образом:
searchtree <- data.frame(myfilepaths[c(1,1:6)], allterms[c(1:2,2:6)], stringsAsFactors = F)
colnames(searchtree) <- c("myfilepaths", "allterms")
Функция будет искатьлюбой шаблон, который находится в той же строке, что и любая папка.
searchtree
myfilepaths allterms
1 J:\\GBD2017\\Venezuela\\xlsx\\2006 test
2 J:\\GBD2017\\Venezuela\\xlsx\\2006 Casos según Entidades|MALARIA8
3 J:\\GBD2017\\Venezuela\\xlsx\\2007 Casos según Entidades|MALARIA8
4 J:\\GBD2017\\Venezuela\\xlsx\\2008 Distrito Capital10|hasta
5 J:\\GBD2017\\Venezuela\\xlsx\\2009 NA12
6 J:\\GBD2017\\Venezuela\\xlsx\\2010 hasta la semana|NA12|NA16|Entidades Federales16
7 J:\\GBD2017\\Venezuela\\xlsx\\2011 NA19|Cuadro|Malaria16
Или вы можете управлять им вручную:
allfolders <- c("folder1","folder1", "folder2")
allpatterns <- c("pattern1", "pattern2", "pattern2")
searchtree <- data.frame(myfilepaths, allterms, stringsAsFactors = F)
searchtree
myfilepaths allterms
1 folder1 pattern1
2 folder1 pattern2
3 folder2 pattern2