Проблема со списком файлов (шаблон = вставить (…)), имена файлов, содержащие точки и цифры

#r #regex

#r #регулярное выражение

Вопрос:

Я пытаюсь прочитать названия нескольких.Файлы RData с использованием функции list.files(). Имена файлов выглядят примерно так: «HadCM3.temp236.run.1.Block.801.950.R2.map.RData» или «HadCM3.temp236.run.1.Block.1151.1300.R2.map.RData». Поскольку я хочу, чтобы вектор имен файлов сортировался численно, я также использую функцию str_sort() из пакета stringr. Код выглядит примерно так:

 hadcm3.variable <- "temp236"
infile.vect <- str_sort(list.files(pattern = paste("hadcm3.", hadcm3.variable, 
".run.1.block.*.R2.map.RData", sep = ""), ignore.case = TRUE), numeric = TRUE)
  

Этот раздел кода содержится в гораздо большем скрипте. Забавно, что когда я запускаю весь скрипт (RStudio версии 1.1.456, R версии 3.5.1), упомянутая команда не работает, и файл заполняется.переменная vect содержит «символ (0)». Однако, когда я выделяю и запускаю только упомянутую команду, это дает желаемый результат, который выглядит следующим образом:

 > infile.vect
[1] "HadCM3.temp236.run.1.Block.801.950.R2.map.RData"
[2] "HadCM3.temp236.run.1.Block.811.960.R2.map.RData"
...
[106] "HadCM3.temp236.run.1.Block.1851.2000.R2.map.RData"
  

Кроме того, я почти уверен, что упомянутая команда выполняется также при запуске всего скрипта, потому что команды непосредственно перед и после также выполняются. Рабочий каталог также должен быть правильным.
Я подозреваю, что у меня проблема с регулярными выражениями здесь (точки и несколько чисел в именах файлов), но пока не удалось ее решить. Как я могу заставить команду работать также при запуске вместе с остальной частью скрипта?
Буду признателен за любую помощь.

Комментарии:

1. Вы запускаете одну команду и весь скрипт из одного каталога?

2. Да, я меняю рабочий каталог один раз в начале скрипта с помощью setwd (…) и больше его не изменяю. Кроме того, это должно быть то же самое, когда я запускаю единственную команду.

3. обязательно распечатайте () свои входные данные непосредственно перед запуском, чтобы облегчить отладку. добавьте if(!length(list_file_output)) stop() , чтобы убедиться, что код немедленно останавливается при обнаружении вашего пограничного регистра

4. Хорошо, я внедрил if(!length(infile.vect)) stop() инструкцию сразу после str_sort(list.files(...)) команды, и выполнение действительно останавливается. Но что именно вы имеете в виду под print() функцией? Я ввел print(infile.vect) функцию непосредственно перед проблемным утверждением. Выводится ожидаемое содержимое входного файла. переменная vect (я перезаписываю файл inf. переменная vect, может ли это быть проблемой?)

5. Кажется, я нашел решение: раньше я не был в RProject. При вводе соответствующего RProject мой код, похоже, работает. Есть идеи, почему это имеет значение?