我如何在R中模仿`ls foo * bar`?

时间:2013-05-09 15:56:50

标签: r grep string-matching

完全难倒,虽然这似乎是一个简单的问题,很快就会被重复投票,但我找不到合适的“模式”来搜索答案。

我正在寻找符合双重模式的文件夹中的文件,然后想要在R中打开它们。所以,假设list.files产生以下内容:

lf <- c("foo_23_bar.txt", "goo_42_mar.txt", "boo_42_bar.txt")

在命令行中,我会使用ls foo*bar来查找第一个文件,但在R中,可以使用

grep(paste("foo","bar",sep="|"),lf)

返回文件1和3.我不确定如何使用perl=TRUE选项。任何帮助都会很棒。谢谢!

3 个答案:

答案 0 :(得分:4)

使用glob2rx获取相应的正则表达式

> glob2rx("foo*bar*")
[1] "^foo.*bar"

> grep(glob2rx("foo*bar*"), lf, value=TRUE)
[1] "foo_23_bar.txt"

答案 1 :(得分:3)

我通常使用系统功能。看看这里。 http://stat.ethz.ch/R-manual/R-patched/library/base/html/system.html

答案 2 :(得分:0)

嗯......其中一个有用的答案已经消失了。无论如何,这正是我的想法,结合了马丁和迈克尔(?)的答案:

list.files(path="data/",pattern=glob2rx("*foo*bar*"))

或者,正如Bingjun所解决的那样:

lf <- system("ls data/*foo*bar*")

这提供了带路径的文件名的额外好处,使得直接将它们读入R更加简单。