Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从具有模式的文件列表中选择文件_R_Filenames - Fatal编程技术网

R 从具有模式的文件列表中选择文件

R 从具有模式的文件列表中选择文件,r,filenames,R,Filenames,我有一个文件列表,它是使用list.files创建的: filesxx<-list.files(pattern="0-4000") 从这个列表中,我想创建一个循环,根据循环变量(a)选择其中一个文件,该变量将是名称中的一个模式,例如变量(a)将是:“Alta Guajira”,在下一个循环中是“Rio Tomo”。。等 我如何做到这一点,如何从已创建的文件列表中选择具有模式的文件? 我认为函数Shopt更多的是排除模式,也许函数find可以工作,但在查找类似的情况后,我还没有找到答案。您

我有一个文件列表,它是使用list.files创建的:

filesxx<-list.files(pattern="0-4000")
从这个列表中,我想创建一个循环,根据循环变量(a)选择其中一个文件,该变量将是名称中的一个模式,例如变量(a)将是:“Alta Guajira”,在下一个循环中是“Rio Tomo”。。等

我如何做到这一点,如何从已创建的文件列表中选择具有模式的文件?
我认为函数
Shopt
更多的是排除模式,也许函数
find
可以工作,但在查找类似的情况后,我还没有找到答案。

您可以使用
list.files()
列出工作目录中的文件。它有一个参数,允许您指定特定模式:

 list.files(pattern = "Alta Guajira")
 # [1] "Alta Guajira Coord & elevation TS 0-4000.txt"  
如果你有一个带图案的向量,比如:

patterns <- c("Alta Guajira", "Rio Tomo", "Rio Sogamoso")
sapply(patterns, function(x){list.files(pattern = x)})

模式
Alta Guajira
Rio Tomo
之间的模式在哪里/是什么,似乎并不明显。您的模式是否总是名称中的连续字符串?如果是这样,请使用
grep()
。我想不清楚,所以我编辑了这个问题,列表是使用list.files创建的,从这个列表中,我将使用循环,循环变量将是“新模式”,并且在每个循环中都会改变,但我不知道如何在已经是list.files结果的列表中查找模式。我希望天气晴朗question@Gin_Salmon“阿尔塔瓜吉拉”,“里约热内卢”。。etc是向量中的元素,循环变量将在每个循环中选择其中一个文件,但我显示的这个列表已经是使用初始模式“0-4000”的list.files的结果。现在我需要一种方法从这个列表中筛选出一个模式,每个周期都会发生变化。我能够调整你的答案,现在可以了。谢谢
patterns <- c("Alta Guajira", "Rio Tomo", "Rio Sogamoso")
sapply(patterns, function(x){list.files(pattern = x)})
df <- c("Alta Guajira Coord & elevation TS 0-4000.txt","Baja Guajira Coord & elevation TS 0-4000.txt", 
        "Bajo Meta Coord & elevation TS 0-4000.txt", "Rio Arauca Coord & elevation TS 0-4000.txt",
        "Rio Catatubo Coord & elevation TS 0-4000.txt", "Rio Cesar Coord & elevation TS 0-4000.txt",
        "Rio Sogamoso Coord & elevation TS 0-4000.txt", "Rio Tomo Coord & elevation TS 0-4000.txt",
        "Sabana de Bogota Coord & elevation TS 0-4000.txt", "Total Area Coord & elevation TS 0-4000.txt")

patterns <- c("Alta Guajira", "Rio Tomo", "Rio Sogamoso")

it  <- 0
res <- c()
for(i in patterns){
    it  <- it + 1
    res <- append(res, df[grepl(pattern = i, x = df)])
}
res
# [1] "Alta Guajira Coord & elevation TS 0-4000.txt" "Rio Tomo Coord & elevation TS 0-4000.txt"    
# [3] "Rio Sogamoso Coord & elevation TS 0-4000.txt"
res2 <- sapply(patterns, function(y){df[grepl(pattern = y, x = df)]})