使用R删除文件的最快方法是什么

时间:2016-05-24 05:55:56

标签: r file unlink

我有一个文件夹,我必须每天删除大约4,000个.rds个文件。这些文件不超过几千字节(最大大小:73 kb),但每次我尝试通过R删除它们时都需要一段时间(如果我手动删除它们也一样)。我想知道是否有其他方法可以更快地删除它们?

我该怎么做才能删除文件:

# ***********************************************************************
# METHOD # 1 :
# reads all the .rds files from folder
files2 <- list.files(paste("/Volumes/share/ZZZ/GOOGLE1/"))

# I use lapply along with file.remove()
TR <- lapply(as.list(files2),function(x) file.remove(paste0("/Volumes/share/ZZZ/GOOGLE1/",x,"")))

# ***********************************************************************
# METHOD #2 : 
do.call(unlink,list(list.files("/Volumes/share/ZZZ/GOOGLE1/",full.names=TRUE)))
# ***********************************************************************
# METHOD # 3 :
unlink("/Volumes/share/ZZZ/GOOGLE1/", recursive=TRUE, force=TRUE)

我通过删除每个方法的100个文件来测试所有3种方法

结果:

METHOD #1 :
  user  system elapsed 
  0.014   0.064  44.133 

METHOD #2 : 
      user  system elapsed 
      0.010   0.047  36.447 


METHOD #3 :
   user  system elapsed 
   0.009   0.057  43.400 


sessionInfo()
R version 3.3.0 (2016-05-03)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.5 (El Capitan)

2 个答案:

答案 0 :(得分:3)

unlink()接受通配符,因此您可以执行以下操作,这在我的系统上看起来非常快:

system.time({ unlink('*.rds'); }); ## deleted 4000 ~65KB files
##    user  system elapsed
##   0.140   0.922   1.151

请注意,@ Thomas关于将system()wait=F一起使用的建议是一个好主意,但有一些缺点:(1)它依赖于平台,(2)您将无法检查remove命令的返回码,因为它是异步运行的,(3)它可能引入竞争条件;例如,如果后续代码快速写入新的*.rds文件,则最终可能会被异步删除命令删除。

答案 1 :(得分:-4)

你想要删除r中的文件吗?我正在使用这个

RM(文件)