2010-03-05 59 views
29

作为在Windows下运行R的大型任务的一部分,我想在目录之间复制选定的文件。是否有可能在R内发出类似cp patha/filea*.csv pathb的命令(注意通配符,用于额外的香料)?使用R来复制文件

回答

42

我不认为有广告直接的方式(害羞的脱壳),但类似以下的东西通常适用于我。

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

注:

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

我认为这个模式应该是''^ filea。+ [。] csv“'。 – Marek 2010-03-05 08:28:35

+0

@Marek:对,你是!另外,特别是在Windows世界中,人们通常会添加“ignore.case = TRUE”参数。我相应编辑,谢谢。 – mjv 2010-03-05 13:16:57

+0

您可以使用?glob2rx将通配符转换为正则表达式。 – 2010-03-05 14:45:13

11

可以

  • 使用system()到断火的命令,如果它是在外壳,含通配符
  • 使用list.files()又名dir()做文件名匹配/ reg.exp匹配自己和拷贝文件分别如图MJV的回答
  • 对单个文件使用file.copy
+0

从来没有听说过'dir'。它与'list.files'非常相似...奇怪的是都有 – MichaelChirico 2016-08-30 00:23:43