我在几个文件夹中有大量文件。我可以用;
获取这些文件的列表MY_FILES <- list.files(WORKING_DIRECTORY, pattern = "MY_PATTERN", recursive = TRUE)
大多数但并非所有文件都大于50Mb。如何修改list.files
调用,以便MY_FILES仅包含高于50Mb阈值的那些?或者之后我还需要另一个步骤来分配MY_FILES吗? (不确定如何执行此操作,因为list.files
仅返回名称向量,没有关于文件的详细信息)
我需要坚持使用R,因为这只是一系列数据操作中的一步。感谢。
答案 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()
。
答案 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]