2014-02-14 2 views
3

Я хочу сделать эквивалент ls в R. Скажите, что я хочу ls /a/b/c/201*/*/d/e/f/*/sameNameFile.gz, эта команда занимает 5 секунд, чтобы работать на терминале, я пытался использовать list.files, но он принимает аргумент path и нуждается в recursive=TRUE. Он принимает возрасты ...Эффективные list.files

Есть ли функция, которую я мог бы использовать (или вариант list.files), что позволит мне запустить эту команду ls (я знаю, что я могу запустить сам comamnd с system(cmd,intern=TRUE), но я хочу R раствор)

+0

Это почти дубликат http://stackoverflow.com/q/21576944/134830 –

+1

Если это команда, которую вы должны запускать регулярно, вам может потребоваться скопировать файлы, которые вы хотите в общую папку, или иным образом реструктурировать вашу систему подачи. –

ответ

4

результат от связанного с этим вопроса

Fast test if directory is empty

было то, что на некоторых системах, system("ls -f -R", intern = TRUE) быстрее, чем list.files. Ваша производительность может отличаться.

Коммутатор -R означает рекурсивный; Коммутаторы -f не сортируются в алфавитном порядке, откуда и происходит увеличение производительности.

+0

Производительность в моем случае равна 1 к 100 ... Также я не использую '-R' здесь, я просто указываю' regex' весь путь ... Мне не нужно использовать 'recursive' в' list. files' – statquant

+1

@statquant тогда не использовать его. Суть этого ответа заключается в том, что 'list.files' медленный, и что-то вроде' system (sprintf ('ls% s', ls_args), intern = TRUE) 'просто быстрее. – shadowtalker

Смежные вопросы