R: получить список файлов, но не каталогов

В R как я могу получить список файлов в папке, но не каталогов?

Я попытался использовать dir(), list.files(), list.dirs() с различными параметрами, но никто из них не работает.

Ответ 1

Здесь одна возможность:

all.files <- list.files(rec=F)
all.files[!file.info(all.files)$isdir]

Другой вариант (шаблон для файлов с расширениями, не столь универсальный, конечно):

Sys.glob("*.*")

Ответ 2

setdiff(list.files(), list.dirs(recursive = FALSE, full.names = FALSE))

сделает трюк.

Ответ 3

Другая опция:

Filter(function(x) file_test("-f", x), list.files())

И если вы хотите полностью функционировать с помощью библиотеки functional, вы можете сэкономить несколько нажатий клавиш:

Filter(Curry(file_test, "-f"), list.files())

Этот последний преобразует file_test в функцию с первым аргументом, установленным в "-f", что в основном является тем, что мы сделали в первом подходе, но Curry делает это более чисто, из-за плачевного решения ключевое слово function должно быть таким длинным (почему бы не f(x) {...}???)

Ответ 4

Итак, я знаю, что все они старые, и что есть принятый ответ, но я пробовал большинство из них, и никто из них не работал.

Вот что я получил:

  • Пример всех файлов в папке:

    files <- list.files("Training/Out/")
    
  • Вывод этого кода:

    [1] "Filtered"           "Training_Chr01.txt" "Training_Chr02.txt" "Training_Chr03.txt"
    [5] "Training_Chr04.txt" "Training_Chr05.txt" "Training_Chr06.txt" "Training_Chr07.txt"
    [9] "Training_Chr08.txt" "Training_Chr09.txt" "Training_Chr10.txt"
    

Где первый [1] - это каталог

  1. Запустите этот код, чтобы получить только файлы:

    files <- list.files("Training/Out",recursive = TRUE)
    
  2. С этим выходом:

    [1] "Training_Chr01.txt" "Training_Chr02.txt" "Training_Chr03.txt" "Training_Chr04.txt"
    [5] "Training_Chr05.txt" "Training_Chr06.txt" "Training_Chr07.txt" "Training_Chr08.txt"
    [9] "Training_Chr09.txt" "Training_Chr10.txt"
    

Это более или менее помогает тем, кто смотрит на это, и был так же смущен, как и я.