2016-10-19 3 views
0

Учитывая путь исправления и очень ограниченные каталоги из года. Я пытаюсь получить каждую комбинацию пути между этой исходной комбинацией (fixPath - года) и различные, нефиксированный и не равно количеству подкаталогов, содержащимися в каждой комбинации fixPath - годХранить несколько выходов с каждой итерации цикла for

fixPath <- "C:/Users/calcazar/Desktop/example" 
year <- 2008:2010 
pathVector <- paste(fixPath, year, sep = "/") 
pathVector 
[1] "C:/Users/calcazar/Desktop/example/2008" "C:/Users/calcazar/Desktop/example/2009" 
[3] "C:/Users/calcazar/Desktop/example/2010" 

Мой подход к решению этой проблемы является использование для цикла:

  1. Установите рабочий каталог с setwd(pathVector[1])
  2. Сканирование фил эс (Подкаталоги) с list.files в этом рабочем каталоге и получить каждую комбинацию с: paste(pathVector[1], list.files(pathVector[1]), sep = "/")
  3. магазина это комбинация в векторе и перейти к следующей итерации

... но от каждой итерации цикла У меня есть куча комбинаций, и я не могу понять, как хранить более одного на каждую итерацию. Вот мой код:

for (i in seq_along(pathVector)) { 
setwd(pathVector[i]) 
# here I only obtain the combination of the last iteration 
# and if I use pathFinal[i] I only obtain the first combination of each iteration 
pathFinal <- paste(pathVector[i], list.files(pathVector[i]), sep = "/") 
# print give me all the combinations 
print(pathFinal[i]) 
} 

Так, как может хранить несколько значений (комбинаций) от каждой итерации в цикле?

Я хочу, чтобы вектор, который содержит все комбинации, например:

"C:/Users/calcazar/Desktop/example/2008/a" 
"C:/Users/calcazar/Desktop/example/2008/z" 
"C:/Users/calcazar/Desktop/example/2009/b" 
"C:/Users/calcazar/Desktop/example/2009/z" 
"C:/Users/calcazar/Desktop/example/2009/y" 
"C:/Users/calcazar/Desktop/example/2010/u" 
+2

does 'list.files (full.names = TRUE, recursive = TRUE)' help с этой задачей? – roman

+0

Нет, это не работает. Любое sugestion в том, как можно применить 'full.names = TRUE' и' recursive = TRUE'? потому что он не работает с 'list.files (fixPath, full.names = TRUE, recursive = TRUE)' –

+0

'list.files (fixPath, recursive = TRUE, include.dirs = TRUE)' Работает отлично! –

ответ

1

Будет что-то подобное делать то, что вы хотите?

pathFinal = NULL 

for (i in seq_along(pathVector)) { 
    setwd(pathVector[i]) 

    pathFinal <- c(pathFinal, paste(pathVector[i], list.files(pathVector[i]), sep = "/")) 

    print(pathFinal[i]) 
} 
+1

оператор присваивания «c» выполняет задачу инкапсуляции всех комбинаций, но функция печати показывает только комбинации первой итерации. Кстати спасибо за ваш ответ! –

+0

Итак, мы на полпути! :) Вы хотите напечатать на каждой итерации все подкаталоги? Поскольку вы можете просто напечатать аргумент paste ('paste (pathVector [i], list.files (pathVector [i]), sep ="/")'). Или вы хотите иметь список, который имеет для каждой итерации все подкаталоги? – User2321

1

Вы могли бы попытаться создать вектор заранее, а затем использовать эту часть в вашей цикл:

append(VectorName, pathFinal[i]) 

вы можете попробовать включить его в существующий код, как этот

pathFinal <- append(pathFinal, paste(pathVector[i], list.files(pathVector[i]), sep = "/")) 

I HAV en't проверил его, но он должен добавить каждое новое значение в нужный вектор. Кроме того, я не думаю, что вам нужно использовать setwd().

+0

или использовать библиотеку 'foreach'. – Henk

+0

функция append выполняет инкапсуляцию всех комбинаций на каждой итерации. Вы правы, использование «setwd» является излишним. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^