R список файлов с несколькими условиями
Я хочу перечислить все файлы в каталоге, которые отвечают определенным условиям (дата и валюта). Так что только с одним условием аргумент pattern
в list.files
работает хорошо:
file.ls <- list.files(path='~/DATA/PiP/Curvas/',pattern='20130801')
Для нескольких условий я пробовал:
file.ls <- list.files(path='~/DATA/PiP/Curvas/',pattern=c('20130801','USD'))
Но имел тот же результат, что и первый. Есть ли способ иметь несколько критериев в pattern
аргумент list.files
?
7 ответов
Filter(function(x) grepl("USD", x), file.ls)
альтернативно, вы можете создать регулярное выражение для pattern, которое будет соответствовать только именам файлов, содержащим обе строки, но это игра мастера.
file.ls <- list.files(path='~/DATA/PiP/Curvas/',pattern="20130801|USD")
В соответствии с Baptiste и ответом на этот пост ( аргумент шаблона list.files в R, расширенное использование регулярного выражения), вы можете использовать следующее выражение:
file.ls <- list.files(path='~/DATA/PiP/Curvas/',
pattern=glob2rx("*20130801*USD*"))
куда *
это подстановочный знак.
Вот:
file.ls2 = intersect(list.files(pattern = "20130801"), list.files(pattern = "USD"))
Если вы хотите использовать «и» (&
), а не "или" (|
), вы можете использовать.+
внутри узора.
Например:
list.files(path='~/DATA/PiP/Curvas/',pattern="20130801.+USD")
Если вы хотите сохранить свой pattern
как вектор (если вы используете это в функции пакета и хотите разрешить пользователю указывать шаблон как вектор вместо того, чтобы использовать |
или *
), вы можете настроить это так:
pattern1 = c('20130801','USD')
file.ls <- list.files(path='~/DATA/PiP/Curvas/', pattern=paste0(pattern1, collapse="|"))
Это также позволяет pattern1
vector, чтобы содержать столько элементов, сколько вы хотите, без необходимости изменять код.
Я так понимаю, вы ищете AND
состояние. Тогда я бы использовал:
file.ls <- grep(pattern = "(?=.*20130801)(?=.*USD)", x = list.files(path = '~/DATA/PiP/Curvas/'), value = TRUE, perl = TRUE)
Я использую эту команду для возврата .tex
файлы, которые я пометил +
знак (своего рода примитивная система тегов). Например, чтобы найти файлы, помеченные как+neuralnet
, и +style
, и +set
, Я использую:
grep("(?=.*\\+style)(?=.*\\+neuralnet)(?=.*\\+set)", list.files("./src", pattern = "*.tex$", full.names = TRUE), value = TRUE, perl = TRUE)
где (?=)
положительный взгляд в будущее, и \\+
используется, чтобы избежать +
знак, который я использую для маркировки файлов. Вы можете добавить столько(?=...)
как условия И по мере необходимости.
Мой .tex
файлы латексные TikZ
файлы. Это неполный список:
[1] "./src/block_diagram-multilayer_perceptron+neuralnet+style+learn.tex"
[2] "./src/block_diagram-perceptron+neuralnet+set+learn.tex"
[3] "./src/discriminator+neuralnet+matrix+foreach+style.tex"
[4] "./src/foreach-neural_network-1h+neuralnet.tex"
[5] "./src/generative_adversarial_network_manual_net+neuralnet.tex"
[6] "./src/generator+neuralnet+matrix.tex"
[7] "./src/hopfield_auto_net+neuralnet+foreach+scope+learn+style+command.tex"
[8] "./src/ml_1h_manual_net+neuralnet+style+matrix+foreach.tex"
[9] "./src/ml_2h_manual_net-color+neuralnet+set+foreach.tex"
[10] "./src/ml_a3c_manual_net_arr+neuralnet.tex"
[11] "./src/ml_auto_net_arr+neuralnet+foreach+style+foreach.tex"
[12] "./src/ml-auto_net_4h_arr+neuralnet+matrix+foreach+style+scope.tex"
[13] "./src/ml-auto_net_bias_arr+neuralnet+learn+foreach+def+command+ifnum+style.tex"
[14] "./src/ml-auto_net_color+neuralnet+foreach.tex"
[15] "./src/ml-auto_net_icon+neuralnet+style+foreach+set+function+learn.tex"
[16] "./src/ml-SVM_manual+neuralnet.tex"
[17] "./src/nn-01-2_summarized+neuralnet+style+learn.tex"
[18] "./src/nn-02_auto_net+neuralnet+foreach+pgf+style+learn.tex"
[19] "./src/nn-03_auto_net+neuralnet+foreach+style+learn.tex"
[20] "./src/nn-04_auto_net+neuralnet+matrix+style+foreach.tex"
[21] "./src/nn-05_auto_net_arr+neuralnet+style+foreach+learn.tex"
[22] "./src/nn-06_manual_net_color+neuralnet+foreach+style.tex"
[23] "./src/nn-08-tkz-berge-01+neuralnet+scope+foreach+pkg.tex"
[24] "./src/nn-09_manual_net+neuralnet+foreach+scope.tex"
[25] "./src/stacked_blocks+neuralnet+3d+def+pgf+set+style.tex"
Затем, используя grep
, с list.files
, и положительный взгляд на регулярное выражение(?=...)
, У меня есть эффективный способ выбора TikZ
файлы по назначению или деятельности, над которыми я хочу работать. Персонаж+
отлично работает с тегами в R и Linux. В Linux я используюfind
вместе с -and
а также -regex
переключатели.