R 列出具有多个条件的文件

问题描述 投票:0回答:7

我想列出目录中满足特定条件(日期和货币)的所有文件。因此,只有一个条件,

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
参数中拥有多个条件?

r search file-listing
7个回答
47
投票
file.ls <- list.files(path='~/DATA/PiP/Curvas/',pattern="20130801|USD")

41
投票

根据Baptiste和这篇文章的答案(R中的list.files模式参数,扩展正则表达式使用),您可以使用以下表达式:

file.ls <- list.files(path='~/DATA/PiP/Curvas/',
pattern=glob2rx("*20130801*USD*"))

其中

*
是通配符。


13
投票

这是:

file.ls2 = intersect(list.files(pattern = "20130801"), list.files(pattern = "USD"))

6
投票
 Filter(function(x) grepl("USD", x), file.ls)

或者,您可以为模式构造一个正则表达式,仅匹配包含两个字符串的文件名,但这是一个向导的游戏。


6
投票

如果您想将

pattern
保留为向量(如果您在包函数中使用它并希望允许用户将模式指定为向量而不是让他们使用
|
*
),你可以这样设置:

pattern1 = c('20130801','USD')
file.ls <- list.files(path='~/DATA/PiP/Curvas/', pattern=paste0(pattern1, collapse="|"))

这还允许

pattern1
向量包含任意数量的元素,而无需调整代码。


6
投票

如果您想使用“和”(

&
) 而不是“或”(
|
),则可以在模式中使用
.+

例如:

list.files(path='~/DATA/PiP/Curvas/',pattern="20130801.+USD")

1
投票

我认为您正在寻找

AND
条件。然后我会用:

file.ls <- grep(pattern = "(?=.*20130801)(?=.*USD)", 
                x = list.files(path = '~/DATA/PiP/Curvas/'), 
                value = TRUE, perl = TRUE)

我使用此命令返回用

.tex
符号(一种原始标记系统)标记的
+
文件。例如,要查找标记为
+neuralnet
and
+style
and
+set
的文件,我使用:

grep("(?=.*\\+style)(?=.*\\+neuralnet)(?=.*\\+set)",
     list.files("./src", pattern = "*.tex$", full.names = TRUE), 
     value = TRUE, perl = TRUE)

其中

(?=)
是正向展望,
\\+
用于转义
+
符号,这是我用来标记文件的字符。您可以根据需要添加任意多个
(?=...)
作为 AND 条件。

我的

.tex
文件是 Latex
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
regex 正向展望
(?=...)
,我可以有效地根据我想要进行的目的或活动来选择
TikZ
文件。在 R 和 Linux 中,字符
+
非常适合标记。在 Linux 中,我使用
find
以及
-and
-regex
开关。

© www.soinside.com 2019 - 2024. All rights reserved.