используя R для копирования файлов - PullRequest
31 голосов
/ 05 марта 2010

В рамках более масштабной задачи, выполняемой в R и выполняемой под Windows, я хотел бы скопировать выбранные файлы между каталогами. Можно ли подать в R команду типа cp patha/filea*.csv pathb (обратите внимание на подстановочный знак для дополнительной специи)?

Ответы [ 2 ]

46 голосов
/ 05 марта 2010

Я не думаю, что есть прямой путь (стесняется обстрела), но что-то вроде следующего обычно работает для меня.

flist <- list.files("patha", "^filea.+[.]csv$", full.names = TRUE)
file.copy(flist, "pathb")

Примечания:

  • Я специально разложился в два этапа, их можно объединить.
  • См. Регулярное выражение: Rиспользует истинное регулярное выражение, а также отделяет шаблон файла от пути в двух отдельных аргументах.
  • обратите внимание на ^ и $ (начало / конец строки) в регулярном выражении - это обычное явлениеДа, так как они неявные для шаблонов типа подстановочных знаков, но требуются для регулярных выражений (чтобы некоторые имена файлов, которые соответствуют шаблону подстановочных знаков, но также начинались и / или заканчивались дополнительным текстом, также выбирались).
  • ВВ мире Windows люди обычно добавляют аргумент ignore.case = TRUE к list.files, чтобы эмулировать тот факт, что при поиске в каталогах в этой ОС не учитывается регистр. Функция
  • R * glob2rx() предоставляет удобный способ преобразованияшаблоны подстановочных знаков для регулярных выражений.Например, fpattern = glob2rx('filea*.csv') возвращает другое, но эквивалентное регулярное выражение.
12 голосов
/ 05 марта 2010

Вы можете

  • используйте system() для запуска команды, как если бы она находилась на оболочке, в том числе для глобализации
  • используйте list.files() aka dir(), чтобы выполнить подстановку / reg.exp, соответствующую себе и копировать файлы по отдельности
  • используйте file.copy для отдельных файлов, как показано в ответе mjv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...