Подтвердить что ты не робот

Использование R для копирования файлов

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

4b9b3361

Ответ 1

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

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

Примечания:

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

Ответ 2

Вы можете

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

Ответ 3

list.files() является чрезмерно медленным при использовании для поиска файлов в сети. Проводник Windows искал файлы намного быстрее, чем список. файл(). Я пытаюсь найти файлы на диске с помощью шаблона, а затем скопировать их на свой локальный диск, задаться вопросом, могу ли я искать файлы с помощью системы, а затем использовать вывод для копирования с использованием R