使用`file.copy`比使用`system(mv ...)`

时间:2018-04-17 21:55:26

标签: r drive

在通过我们的公司网络访问文件时,我遇到了一些R问题变得非常迟缓的问题。所以我退回并做了一些测试,我惊讶地发现R file.copy()命令 MUCH 比使用{{1}的等效文件副本慢}。这是一个已知问题还是我在这里做错了什么?

这是我的测试:

我有3个文件:

  • system(mv ...) - ~100MB
  • large_random.txt - ~10MB
  • medium_random.txt - ~1 MB

我在我的Mac上创建了这些:

small_random.txt

但是以下R测试都是使用在虚拟机中运行的Windows完成的。 J驱车是当地的,N驱车距离酒店有700英里。

dd if=/dev/urandom of=small_random.txt bs=1048576 count=1
dd if=/dev/urandom of=medium_random.txt bs=1048576 count=10
dd if=/dev/urandom of=large_random.txt bs=1048576 count=100

结果如下:

library(tictoc)

test_copy <- function(source, des){
  tic('r file.copy')
  file.remove(des)
  file.copy(source, des )
  toc()

  tic('system call')
  system(paste('rm', des, sep=' '))
  system(paste('cp', source, des, sep=' '))
  toc()
}

source <- 'J:\\tidy_examples\\dummyfiles\\small_random.txt'
des <- 'N:\\JAL\\2018\\_temp\\small_random.txt'
test_copy(source, des)

source <- 'J:\\tidy_examples\\dummyfiles\\medium_random.txt'
des <- 'N:\\JAL\\2018\\_temp\\medium_random.txt'
test_copy(source, des)

source <- 'J:\\tidy_examples\\dummyfiles\\large_random.txt'
des <- 'N:\\JAL\\2018\\_temp\\large_random.txt'
test_copy(source, des)

那么是什么让系统调用更快?在大文件大小时,它是>慢了18倍!

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,即文件共享在网络共享驱动器上的性能低下。我的解决方案是使用fs :: file_copy()代替,它的性能甚至比直接复制系统要好。 https://www.rdocumentation.org/packages/fs/versions/1.3.1/topics/copy