与 glob2rx R 进行模式匹配

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

我的目录 (

.txt
) 中有几个
filedir
文件,它们以以下字符串开头:

files= c('sasmin_somedata.txt','sasmax_somedata.txt','sas_somedata.txt')

s=c("sasmin","sasmax","sas") 

我想使用

s
列出
files
中的三个文件。

我尝试了以下代码:

p <- glob2rx(paste0(s, filedir))

final <- list.files(filedir, p, full.names=TRUE)

但是,我不断收到

sasmin
sasmax
的重复项,因为我当前的
glob2rx
实现使用“sas”作为通配符,无法将“
sas
”与“
sasmin
”或“
sasmax
”不同。

r wildcard
1个回答
0
投票

我不清楚这些文件的精确布局是什么。假设自从您提到

filedir
是一个目录以来就是这样。我添加了几个其他文件只是为了确保过滤正常工作。

└── somedata
    ├── bar.txt
    ├── foo.txt
    ├── sasmax_somedata.txt
    ├── sasmin_somedata.txt
    ├── sas_somedata.txt
    └── somedata.txt

如果您想使用这些前缀作为过滤器

s <- c("sasmin", "sasmax", "sas")

然后我建议跳过使用

glob2rx
并手动滚动 REGEX。

list.files(filedir, paste(s, collapse ="|"), full.names = TRUE)

结果:

"somedata/sas_somedata.txt" "somedata/sasmax_somedata.txt" "somedata/sasmin_somedata.txt"

我建议这种方法的原因是您当前对

glob2rx()
的调用返回 REGEX 向量,我的理解是
list.files()
仅使用其中的第一个。

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