list.files考虑到R中的文件大小?

时间:2016-09-16 11:47:07

标签: r file

我在几个文件夹中有大量文件。我可以用;

获取这些文件的列表
MY_FILES <- list.files(WORKING_DIRECTORY, pattern = "MY_PATTERN", recursive = TRUE)

大多数但并非所有文件都大于50Mb。如何修改list.files调用,以便MY_FILES仅包含高于50Mb阈值的那些?或者之后我还需要另一个步骤来分配MY_FILES吗? (不确定如何执行此操作,因为list.files仅返回名称向量,没有关于文件的详细信息)

我需要坚持使用R,因为这只是一系列数据操作中的一步。感谢。

3 个答案:

答案 0 :(得分:10)

当然,只需获取文件大小。

x <- list.files(full.names = TRUE)

x[sapply(x, file.size) > 300000]
[1] "./hami.jpg"          "./process_steps.jpg" "./shp_sveta.png"

这里我只分配大于300kB的文件。请注意,atom.jpg和其他较小的文件不包含在子集中。您应该使用full.names参数来访问不在getwd()

中的文件

enter image description here

答案 1 :(得分:1)

这是list.files的包装器:

list_files  <- function(path=".", pattern=NULL, min_size=50000000, 
                        all.files=FALSE, full.names=FALSE, recursive=FALSE,
                        ignore.case=FALSE, include.dirs=FALSE, no..=FALSE) {

  pre <- list.files(path, pattern, all.files, full.names, recursive, ignore.case, 
                    include.dirs, no..)

  purrr::discard(pre, ~file.size(.)<min_size)

}

答案 2 :(得分:1)

而不是循环(隐式或显式),执行此操作的矢量化方法是通过file.info

objs <- file.info(list.files("~", full.names=TRUE))
rownames(objs)[objs$size > 50e6]
相关问题