我想创建R中一个简单的CSV表格输出包含通过目录(递归)只有文件的列表。输出应包含最低3列:
我有以下脚本,我从互联网上,它适用于各种场所砍死在一起,但我觉得是不是“最好”的方式做到这一点和/或可能是易碎的。我寻求/建议的任何意见如何清洁起来,有助于提高我的R-技能。谢谢!
*我特别关心的是如何工作的cbind,以及它是如何“知道”如果排排/顺序被保存?
library(digest)
library(tidyverse)
library(magrittr)
test_dir <- "C:\\Path\\To\\Folder"
outfile <- "out.csv"
file.names <- list.files(test_dir, recursive = TRUE, full.names = TRUE)
md5s <- sapply(file.names, digest, file = TRUE, algo = "md5")
q <- map(file.names, file.info)
file.sizes <- map_df(q, extract, c("size"))
output <- cbind(file.names, file.sizes, md5s)
write_csv(output, str_c("./R/", outfile))
一个技巧可能是使用的openssl
MD5函数而不是digest
的。
library(openssl)
md5s <- md5(file.names)
它已经矢量化,所以你不会需要使用sapply这可以提高你的处理速度(取决于你想有一个文件有多大散列)。
在cbind方面,它会让你绑定到使用密钥(MD5),所以输出将有file.names有顺序的第一列的顺序。