I want to list all files in a directory that met certain conditions (date and currency). So with only one condition the argument pattern
in list.files
Filter(function(x) grepl("USD", x), file.ls)
alternatively, you could construct a regular expression for pattern that only matches filenames containing both strings, but that's a wizard's game.
I interpret you are looking for an AND
condition. Then I would use:
file.ls <- grep(pattern = "(?=.*20130801)(?=.*USD)", x = list.files(path = '~/DATA/PiP/Curvas/'), value = TRUE, perl = TRUE)
I use this command to return .tex
files that I have tagged with the +
sign (a sort of primitive tagging system). For instance, to find files that are tagged as +neuralnet
, and +style
, and +set
, I use:
grep("(?=.*\\+style)(?=.*\\+neuralnet)(?=.*\\+set)", list.files("./src", pattern = "*.tex$", full.names = TRUE), value = TRUE, perl = TRUE)
where (?=)
is the positive look ahead, and \\+
is used to escape the +
sign, which is the character I use for tagging the files. You may add as many (?=...)
as AND conditions as you need.
My .tex
files are Latex TikZ
files. This is a partial list:
[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"
Then, by using grep
, with list.files
, and the regex positive look ahead (?=...)
, I get an effective way of selecting TikZ
files by purpose or activity I want to work on. The character +
works fine for tagging, in R and Linux. In Linux I use find
along with -and
and -regex
switches.
Here it is:
file.ls2 = intersect(list.files(pattern = "20130801"), list.files(pattern = "USD"))
file.ls <- list.files(path='~/DATA/PiP/Curvas/',pattern="20130801|USD")
If you want to preserve your pattern
as a vector (if you are using this in a package function and want to allow the user to specify the pattern as a vector instead of having them use |
or *
), you can set it up like this:
pattern1 = c('20130801','USD')
file.ls <- list.files(path='~/DATA/PiP/Curvas/', pattern=paste0(pattern1, collapse="|"))
This also allows the pattern1
vector to contain as many elements as you want without having to adjust your code.
In line with Baptiste and the answer on this post (list.files pattern argument in R, extended regular expression use), you can use the following expression:
file.ls <- list.files(path='~/DATA/PiP/Curvas/',
pattern=glob2rx("*20130801*USD*"))
Where *
is the wildcard.