【发布时间】:2018-10-01 22:13:16
【问题描述】:
我有一系列文件。每个文件名都有两个数字。第一个数字是代号,可以是 0 - 250 之间的数字。下一个数字是 1 - 450 之间的型号。
一些例子:
Generation_Flux_0_Model_10.txt
Generation_Flux_0_Model_5.txt
Generation_Flux_1_Model_20.txt
Generation_Flux_2_Model_17.txt
Generation_Flux_5_Model_9.txt
Generation_Flux_55_Model_5.txt
Generation_Flux_117_Model_2.txt
Generation_Flux_8_Model_23.txt
我只想列出一组指定代的文件。例如,获取第 1 代和第 8 代的文件应该只列出:
Generation_Flux_1_Model_20.txt 和 Generation_Flux_8_Model_23.txt。
我写了以下行,它只产生一个二进制值。
reactionFile = list.files(pattern = "\\.txt$")
generations = c(0, 1, 8)
str_extract(reactionFile,"\\d+")%in%generations
[1] 真 真 真 假 假 假 真 真
- 有没有办法在 list.files(pattern="") 参数?
- 还有哪种方法可以更快地选择唯一需要的文件? 列出目录中的所有文件并获取子集或 使用 list.files() 仅加载所需的文件?
【问题讨论】:
-
对于每个世代号,如果它是单个数字,请使用像
^Generation_Flux_[81]_Model_\\d+\\.txt$这样的字符类。如果像55和110这样的代数超过一个数字,请使用一个组:^Generation_Flux_(55|110)_Model_\\d+\\.txt$。对于一位和多位数字的通用解决方案,请使用分组。 -
...但是如果您想要第 1 代到第 50 代,您应该为它构建一个模式:
^Generation_Flux_([1-9]|[1-4]\\d|50)_Model_\\d+\\.txt$ -
@revo 在 R 中,我们可以用任何一组数字动态地构建一个交替。
-
@revo 第一个解决方案有效。如果我的要求发生变化,第二个可能会很方便。谢谢。
-
标签: r regex file-search