【问题标题】:using R to copy files使用 R 复制文件
【发布时间】:2011-01-23 23:30:45
【问题描述】:

作为在 Windows 下运行的 R 中执行的更大任务的一部分,我想在目录之间复制选定的文件。是否可以在 R 中提供类似cp patha/filea*.csv pathb 的命令(注意通配符,以获得额外的趣味)?

【问题讨论】:

    标签: r file copy


    【解决方案1】:

    你可以

    • 使用system() 像在shell 上一样触发命令,包括通配符
    • 使用 list.files() aka dir() 进行匹配自己的 globbing / reg.exp 并单独复制文件
    • 在单个文件上使用file.copy,如 mjv 的回答所示

    【讨论】:

    • 从未听说过dir。它与list.files完全相同...奇怪的是两者都有
    【解决方案2】:

    我不认为有直接的方法(避免炮轰),但类似以下的方法通常对我有用。

    flist <- list.files("patha", "^filea.+[.]csv$", full.names = TRUE)
    file.copy(flist, "pathb")
    

    注意事项:

    • 我特意分两步分解,可以合并。
    • 查看正则表达式:R 使用真正的正则表达式,并且还在两个单独的参数中将文件模式与路径分开。
    • 注意正则表达式中的^$(字符串的beg/end)——这是一个常见的陷阱,因为它们隐含在通配符类型模式中,但对于正则表达式是必需的(以免某些文件名匹配通配符模式,但也可以选择以附加文本开头和/或结尾)。
    • 在 Windows 世界中,人们通常会将 ignore.case = TRUE 参数添加到 list.files,以模拟此操作系统的目录搜索不区分大小写这一事实。
    • R 的glob2rx() 函数提供了一种将通配符模式转换为正则表达式的便捷方法。例如,fpattern = glob2rx('filea*.csv') 返回一个不同但等效的正则表达式。

    【讨论】:

    • 我认为模式应该是"^filea.+[.]csv"
    • @Marek:没错!此外,特别是在 Windows 世界中,人们通常希望添加参数 ignore.case = TRUE。我相应地进行了编辑,谢谢。
    • 您可以使用 ?glob2rx 将通配符转换为正则表达式。
    • @Edurardo Leoni:是的,你可以。 R 语言的好处是你不断发现做事的方式,即使只是偶尔令人不安。这是我第一次听说 R 中的 glob2rx;我通常用手写的方式编写我的正则表达式(顺便说一句,通配模式并不难),但是是的,glob2rx() 有效。我会将此添加到答案中的注释中。
    • 如果您使用它来复制和替换文件,那么请不要忘记file.copy() 中添加overwrite = TRUE!调试这个花了一个小时。
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2012-01-24
    • 2016-04-22
    • 2016-12-28
    • 2018-09-25
    • 2014-10-14
    相关资源
    最近更新 更多