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 переключатели.

Другие вопросы по тегам