Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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_Regex - Fatal编程技术网

R 试图删减文件列表

R 试图删减文件列表,r,regex,R,Regex,我有一个文件列表,我正在尝试提取所有layer1*.grd文件。在一个grep表达式中有这样做的方法吗 lof <- c("layer1_1.grd", "layer1_1.gri", "layer1_2.grd", "layer1_2.gri", "layer1_3.grd", "layer1_3.gri", "layer1_4.grd", "layer1_4.gri", "layer1_5.grd", "layer1_5.gri", "layer2_1.grd", "layer2_

我有一个文件列表,我正在尝试提取所有layer1*.grd文件。在一个grep表达式中有这样做的方法吗

lof <- c("layer1_1.grd", "layer1_1.gri", "layer1_2.grd", "layer1_2.gri", 
"layer1_3.grd", "layer1_3.gri", "layer1_4.grd", "layer1_4.gri", 
"layer1_5.grd", "layer1_5.gri", "layer2_1.grd", "layer2_1.gri", 
"layer2_2.grd", "layer2_2.gri", "layer2_3.grd", "layer2_3.gri", 
"layer2_4.grd", "layer2_4.gri", "layer2_5.grd", "layer2_5.gri", 
"layer3_1.grd", "layer3_1.gri", "layer3_2.grd", "layer3_2.gri", 
"layer3_3.grd", "layer3_3.gri", "layer3_4.grd", "layer3_4.gri", 
"layer3_5.grd", "layer3_5.gri", "layer4_1.grd", "layer4_1.gri", 
"layer4_2.grd", "layer4_2.gri", "layer4_3.grd", "layer4_3.gri", 
"layer4_4.grd", "layer4_4.gri", "layer4_5.grd", "layer4_5.gri")
我试着分两步来做:

list.of.files <- list.files(pattern = c("1_"))
list.of.files <- list.of.files[grep(".grd", list.of.files)]
有人能告诉我如何一步完成这项工作吗?我天真地尝试将list和c传递给grep,但是,正如您所想象的,它不起作用

list.of.files <- list.files()
list.of.files <- list.of.files[grep(list("1_", ".grd"), list.of.files)]

这应该适合您:

> lof[grep("layer1_.*.grd", lof)]
[1] "layer1_1.grd" "layer1_2.grd" "layer1_3.grd" "layer1_4.grd" "layer1_5.grd"

另外,为了澄清你的术语:你的文件列表并不是一个真正的列表;这是一个字符向量。

这应该适用于您:

> lof[grep("layer1_.*.grd", lof)]
[1] "layer1_1.grd" "layer1_2.grd" "layer1_3.grd" "layer1_4.grd" "layer1_5.grd"
另外,为了澄清你的术语:你的文件列表并不是一个真正的列表;这是一个字符向量。

stringr的替代方案是lof[str_detectlof,layer1.*.grd]

事实上,在这种情况下,您可以更具体地了解缺少的字符,因此layer1_[[:digit:].grd将作为此处的模式,如果lof很长,则可能会更快。

stringr替代方法是lof[str_detectlof,layer1_173.grd]


事实上,在这种情况下,您可以更具体地说明缺少的字符,因此layer1_[[:digit:].\\\.grd将作为这里的模式,如果lof很长,可能会更快。

要获得匹配的值,可以使用greplayer1_173.*.grd,lof,value=TRUE。我认为您需要layer1_[:\\\\\\.grd因为单点意味着匹配一个字符,所以。*。和.+给出了相同的结果。检查greplayer1_.*.grd,layer1_xgrd。要获得匹配的值,可以使用greplayer1_.*.grd,lof,value=TRUE。我想您需要layer1_.*\\\.grd,因为单点表示匹配一个字符,所以。*。和.+给出了相同的结果。检查greplayer1.*.grd,layer1.*grd。