R:Sys.glob中的支撑扩展()

时间:2010-06-22 17:01:12

标签: r filesystems glob

是否可以让R的Sys.glob()函数展开括号?我的意思是类似于/home/foo/{a,b}/bar.txt的模式应该找到文件/home/foo/a/bar.txt和/home/foo/b/bar.txt它们都存在。默认情况下,R不会扩展大括号。

使用GLOB_BRACE标志可以在glob(3)中进行大括号扩展。我猜R只是在封面下面调用glob(3)所以我希望有一些方法,但我似乎无法找到正确的调用...

3 个答案:

答案 0 :(得分:1)

我只是提到,你也可以使用system(实习生参数设置为TRUE)并调用你想要使用的任何系统命令,如果它没有直接暴露在R的Sys.*()中例如,这只是为csv文件调用ls

x <- system("ls *.csv", intern=TRUE)

答案 1 :(得分:0)

听起来很有用。

实际的工作是由R源代码文件do_glob()中的src/main/sysutils.c子例程完成的 - 也许你可以从那里开始修补补丁?

GLOB_MARK已经有条件地添加(在可用时),所以也许你可以影响那个工作?

答案 2 :(得分:0)

对于您的特定示例,您可以首先使用expand_braces中的bracer函数在所需的路径上进行大括号扩展,然后将可能路径的字符向量传递到Sys.glob,即< / p>

Sys_glob <- function(paths, dirmark = FALSE) {
   paths <- lapply(paths, bracer::expand_braces)
   paths <- c(paths, recursive=TRUE)
   base::Sys.glob(paths, dirmark=dirmark)
}