#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 мой код, похоже, работает. Есть идеи, почему это имеет значение?