是否可以让 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) 所以我希望有某种方法,但我似乎找不到正确的调用......
是否可以让 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) 所以我希望有某种方法,但我似乎找不到正确的调用......
我只是提到,您也可以使用system
(将 intern 参数设置为 TRUE)并调用您想要使用的任何系统命令,如果它没有直接暴露Sys.*()
在 R 中。例如,这只需要ls
csv 文件:
x <- system("ls *.csv", intern=TRUE)
听起来很有用。
实际工作是由R 源do_glob()
文件中的子程序完成的src/main/sysutils.c
——也许你可以从那里开始着手开发补丁?
GLOB_MARK
已经有条件地添加(在可用时),所以也许你可以隐藏这项工作?
bracer
包的函数glob()
是一个包装器,Sys.glob()
它在执行大括号扩展后查找文件。在您的特定示例bracer::glob("/home/foo/{a,b}/bar.txt")
中,确实会找到文件/home/foo/a/bar.txt
,并且/home/foo/b/bar.txt
它们是否都应该存在。