gpt4 book ai didi

r - 如何使用 Plyr、Apply 或类似方法矢量化此 R 代码?

转载 作者:行者123 更新时间:2023-12-04 17:23:56 25 4
gpt4 key购买 nike

我编写了以下 R 代码来标识目录中的重复文件。如何使用 plyr 包(或类似包)对 for 循环进行矢量化?我想实现一个比我想出的更惯用的 R 解决方案。

library("digest") # to compute the MD5 digest
test_dir = "/Users/user/Dropbox/kaggle/r_projects/test_photo"
filelist <- dir(test_dir, pattern = "JPG|AVI", recursive=TRUE,
all.files =TRUE, full.names=TRUE)

fl = list() #create and empty list to hold md5's and filenames

for (itm in filelist) {
file_digest = digest(itm, file=TRUE, algo="md5")
fl[[file_digest]]= c(fl[[file_digest]],itm)
}
fl

输出是(使用一个小的测试目录):
> fl
$`5715b719723c5111b3a38a6ff8b7ca56`
[1] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_a/IMG_3480 copy.JPG"
[2] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_a/IMG_3480.JPG"

$`24fd4d7d252ca66c8d7a88b539c55112`
[1] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_a/IMG_3481 copy.JPG"
[2] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_a/IMG_3481.JPG"
[3] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_b/IMG_3481.JPG"

$`2a1d668c874dc856b9df0fbf3f2e81ec`
[1] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_a/IMG_3482 copy.JPG"
[2] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_a/IMG_3482.JPG"
[3] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_b/IMG_3482 copy.JPG"
[4] "/Users/user/Dropbox/kaggle/r_projects/test_photo/folder_b/IMG_3482.JPG"

我试过:
h=ldply(filelist, digest, file=TRUE, algo="md5")
h$filenames=filelist

但最终为(MD5,文件名)的每个键值对都有一个唯一的行。我无法获得所需的紧凑输出。

(背景:作为练习,我转换了 Raymond Hettinger 在他的 PyCon AU 2011 主题演讲“What Makes Python Awesome”中展示的 Python 代码。幻灯片在这里: http://slidesha.re/WKkh9M。我能够将 LOC 减半,但我认为我可以通过矢量化做得更好 - 并了解更多信息)。

最佳答案

这是 base 中的一个更简洁的解决方案:

md5s<-sapply(filelist,digest,file=TRUE,algo="md5")
split(filelist,md5s)

关于r - 如何使用 Plyr、Apply 或类似方法矢量化此 R 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com