代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

试图删除文件列表

  •  1
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    我有一个文件列表,我正在尝试提取所有第1层的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)]
    

    有人能告诉我如何用grep一步完成这个任务吗?我天真地尝试将list()和c()传递给grep,但正如您所能想象的,它不起作用。

    list.of.files <- list.files()
    list.of.files <- list.of.files[grep(list("1_", ".grd"), list.of.files)]
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Shane    14 年前

    这应该对你有用:

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

    另外,只是为了澄清你的术语:你的文件列表并不是真正的 list 这是一个 character 矢量。

        2
  •  2
  •   Richie Cotton Joris Meys    14 年前

    这个 stringr 替代方案是 lof[str_detect(lof, "layer1_.*.grd")] .

    事实上,在本例中,您可以更具体地了解缺少的字符,因此 "layer1_[[:digit:]].grd" 会像这里的模式一样工作,如果 lof 很长。