R:Sys.glob() 中的大括号扩展
是否可以让 R 的 Sys.glob() 函数展开大括号?我的意思是类似于 /home/foo/{a,b}/bar.txt 的模式应该找到文件 /home/foo/a/bar.txt 和 /home/foo/b/bar.txt 如果它们都存在。默认情况下,R 不展开大括号。
在 glob(3) 中可以使用 GLOB_BRACE 标志进行大括号扩展。我猜 R 只是在幕后调用 glob(3) 所以我希望有某种方法,但我似乎找不到正确的调用......
Is it possible to have R's Sys.glob() function expand braces? What I mean is a pattern similar to /home/foo/{a,b}/bar.txt should find files /home/foo/a/bar.txt and /home/foo/b/bar.txt should they both exist. By default R does not expand the braces.
Brace expansion is possible in glob(3) with the GLOB_BRACE flag. I am guessing R is just calling glob(3) underneath the covers so I hope there is some way, but I can't seem to find the right invocation...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
bracer
包的glob()
函数是Sys.glob()
的包装器,它在执行大括号扩展后查找文件。在您的特定示例中bracer::glob("/home/foo/{a,b}/bar.txt")
确实会找到文件/home/foo/a/bar.txt
和/home/foo/b/bar.txt
(如果它们都存在)。The
bracer
package'sglob()
function is a wrapper aroundSys.glob()
that finds files after performing brace expansion. In your particular examplebracer::glob("/home/foo/{a,b}/bar.txt")
would indeed find files/home/foo/a/bar.txt
and/home/foo/b/bar.txt
if they should both exist.我只是提到,您还可以使用
system
(将 intern 参数设置为 TRUE)并调用您想要使用的任何系统命令(如果它没有直接在Sys.*( )
在 R 中。例如,这只是为 csv 文件调用ls
:I just mention, that you could also use
system
(with the intern param set to TRUE) and call whatever system command you want to use if it isn't exposed directly inSys.*()
in R. For example, this just callsls
for csv files:听起来很有用。
实际工作是由 R 源文件中的
src/main/sysutils.c
文件中的do_glob()
子例程完成的——也许您可以从那里开始朝着修补?GLOB_MARK
已经有条件地添加(在可用时),所以也许您可以跟踪该工作?Sounds useful.
The actual work is done by the
do_glob()
subroutine in the filesrc/main/sysutils.c
in the R sources -- maybe you can start there with work towards a patch?GLOB_MARK
is already added conditionally (on being available) so maybe you can shadow that work?