【问题标题】:Wildcard in the middle of an expression?表达式中间的通配符?
【发布时间】:2012-04-03 12:24:47
【问题描述】:

我尝试根据文件名加载不同类别的文件。到现在我一直在用

list<-dir(pattern=".gle$") 

获取所有 gle 文件。现在我想分别加载人口 bg、campo 和 pca,我正在寻找一个可以在文件名中间使用的通配符,例如

0KK_bg_SunAdj.gle
0LC_campo_SunAdj.gle
0KR_pca_SunAdj_corr.gle

我想到了类似的东西

list<-dir(pattern=glob2rx("*something*bg*something*.gle$"))

但我尝试了?glob2rx 帮助文件中的所有示例,但没有成功。 我确定这是可能的(我的意思是;它是 R...)但我无法弄清楚...

谢谢!

【问题讨论】:

  • 可能你不需要$glob2rx的参数结尾
  • @kohske:好的!但是我应该在中间使用什么(在 bg 和 .gle 之间)?
  • pattern = "bg", pattern = campo"pattern = "pca" 不剪吗?
  • @RomanLuštrik:就像 BenBarnes 在他的回答中提到的那样;有了你的模式,我的列表中也有非 gle 文件......
  • 我不知道其他文件也存在(但回头看,现在确实有意义),抱歉。

标签: regex r


【解决方案1】:

怎么样

list1<-dir(pattern="[[:print:]]*_bg_[[:print:]]*.gle")
list2<-dir(pattern="[[:print:]]*_campo_[[:print:]]*.gle")
list3<-dir(pattern="[[:print:]]*_pca_[[:print:]]*.gle")

但这些可能会拾取目录中的其他文件。如果不是,那么@RomanLuštrik 可能在上面的评论中一针见血。 编辑:实际上,@RomanLuštrik 的评论会选择非 .gle 文件。所以上面的代码会更合适。

【讨论】:

    【解决方案2】:

    我认为您需要 glob2rx 函数中的其他选项来修剪头部和尾部。例如,

    R> f = c("0KK_bg_SunAdj.gle", "0LC_campo_SunAdj.gle", "0KR_pca_SunAdj_corr.gle")
    R> m = glob2rx("*campo*.gle", FALSE, FALSE)
    R> grepl(m, f)
    [1] FALSE  TRUE FALSE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2013-12-16
      相关资源
      最近更新 更多