У меня есть ряд последовательных каталогов для сбора файлов на сервере Linux, на который я удаленно вхожу и обрабатываю с терминала R.
/ r18_060, / r18_061, ... / r18_118, / r18_119
В каждом каталоге указывается день года, когда были зарегистрированы данные, и он содержит серию файлов со стандартным префиксом, например, «fl.060.gz»
Я должен предоставить функцию, которая содержит несколько команд system () с глобусом linux на день. Я хочу разделить год на 60-дневные интервалы, чтобы сделать QA / QC более управляемым. Поскольку я пересекаю 099 - 100 в глобусе, я должен использовать расширение скобки, чтобы соответствовать правильной последовательности дней.
ls -d /root_driectory/r18_{0[6-9]?,1[0-1]?}
ls -d /root_driectory/r18_{060..119}
Все это прекрасно работает, когда я вручную вводю эти глобусы в оболочку bash, но я получаю сообщение об ошибке, когда функция system () предоставляет аналогичную команду через R.
day_glob <- {060..119}
system(paste("zcat /root_directory/r_18.", day_glob, "/fl.???.gz > tmpfile", sep = "")
>gzip: cannot access '/root_directory/r18_{060..119}': No such file or directory
Я знаю, что это может быть ошибка в оболочке, в которой работает функция system (), но когда я запрашиваю, что она дает правильную среду и имя пользователя
system("env | grep ^SHELL=")
>SHELL=/bin/bash
system("echo $USER")
>tgw
Кто-нибудь знает, почему происходит сбой, когда он передается через команду system () R? Что я могу сделать, чтобы обойти эту проблему, не удаляя системный вызов вообще? Есть много сценариев, которые полагаются на эти функции, и переписывание всего семейства сценариев R было бы непосильным по времени.
Раньше я использовал 50-дневные интервалы, чтобы избежать этой проблемы, но я думал, что это должно быть что-то, что можно легко изменить, и делать меньше итераций моих сценариев QA / QC в год. Я новичок в ОС Linux, поэтому я подумал, что, возможно, просто упускаю что-то очевидное.