我正在尝试在R中创建一个简单的csv表输出,该输出仅包含通过目录列出的文件列表(递归)。输出应至少包含3列:
我有以下脚本,可以从Internet上的不同地方窃听,可以正常工作,但是我认为这不是“最佳”方法,并且/或者可能比较脆弱。我正在寻求有关如何清理并帮助改善我的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))
答案 0 :(得分:1)
一个技巧可能是使用openssl
md5函数而不是digest
。
library(openssl)
md5s <- md5(file.names)
它已经被矢量化了,所以您不需要使用sapply,它可以提高处理速度(取决于您要散列的文件大小)。
对于 cbind ,它将保留您使用键(md5)绑定到的第一列的顺序,因此输出将具有file.names的顺序。