Мне нужно использовать подстановочный знак в моем пути, но R почему-то не распознает его. Путь правильный. Любая идея, почему это терпит неудачу?
list.files(path = paste0("./Unzipped/",input_files[1],"/Variants/*/"), pattern = "tsv$")
character(0)
Файл находится здесь:
"./Unzipped/FolderLoop/Variants/FolderNameVaries/file1.tsv"
Хм. Я понимаю. Как бы мы тогда указали путь, когда фактические имена каталогов меняются между входами?
Переместите input_files в шаблон. Покажите несколько примеров имен папок/файлов, чтобы получить более прямой ответ.
Это может быть проще с fs::dir_ls, которая распознает подстановочные знаки.
@dipetkov Нет, fs::dir_ls
в этом отношении ведет себя точно так же, как list.files
. Он поддерживает глобусы для фильтрации, что соответствует аргументу pattern
list.files
.
Думаю, я нашел решение, используя функцию dir с рекурсивным = T
@KonradRudolph Прошу прощения за неясность. Под «может быть проще с fs
» я имел в виду, что, по моему опыту, этот пакет упрощает операции с файловой системой по сравнению с базовым R. Так что, возможно, стоит знать об этом.
Список файлов с шаблоном файла и рекурсивно:
x <- list.files(path = "./Unzipped/", pattern = "*.tsv", recursive = TRUE)
#it should return something like this:
x <- c("./Unzipped/FolderLoop1/Variants/FolderNameVaries/file11.tsv",
"./Unzipped/FolderLoop2/Variants/FolderNameVaries/file22.tsv",
"./Unzipped/FolderLoop3/Variants/FolderNameVaries/file33.tsv")
Затем используйте регулярное выражение для сопоставления папок:
grep("FolderLoop1", x, value = TRUE, fixed = TRUE)
# [1] "./Unzipped/FolderLoop1/Variants/FolderNameVaries/file11.tsv"
Двухэтапный подход рекурсия + grep имеет непреднамеренный побочный эффект, заключающийся в том, что он будет соответствовать как FolderLoop1/Variants/FolderNameVaries/file11.tsv
, так и FolderLoop3/Variants/FolderLoop1/file33.tsv
, если этот второй файл существует.
@dipetkov, конечно, это не решение, а просто идея, они могут улучшить регулярное выражение, чтобы оно соответствовало их проблеме.
Да, аргумент
path
не поддерживает подстановочные знаки.