Как часть более крупной задачи, выполняемой в R, выполняется под окнами, я хотел бы скопировать выбранные файлы между каталогами. Можно ли дать внутри R команду вроде cp patha/filea*.csv pathb
(обратите внимание на подстановочный знак, для дополнительной специи)?
Использование R для копирования файлов
Ответ 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()
akadir()
, чтобы выполнить сопряжение globbing/reg.exp самостоятельно и скопировать файлы отдельно - используйте
file.copy
для отдельных файлов, как показано в ответе mjv
Ответ 3
list.files() является чрезмерно медленным при использовании для поиска файлов в сети. Проводник Windows искал файлы намного быстрее, чем список. файл(). Я пытаюсь найти файлы на диске с помощью шаблона, а затем скопировать их на свой локальный диск, задаться вопросом, могу ли я искать файлы с помощью системы, а затем использовать вывод для копирования с использованием R