请帮助 - 使用R,我如何在所有驱动器(硬盘驱动器以及连接的USB驱动器)上搜索特定文件/文件夹?
例如,我正在寻找一个名为" MyFiles"的目录,它可以在我的C:或我的USB(E :)上的任何地方。我想知道目录的所有树位置。
感谢您的任何建议!
答案 0 :(得分:5)
在我误读线程时你在评论中搞砸了一些(你需要dirs)。您仍然可以使用list.files()
tho执行此操作。我模拟了一个目录结构,查找名为“data
”的目录,但还包含一个名为“data
”的文件:
(pre <- list.files("/var/tmp/a", "data", recursive=TRUE, full.names=TRUE, include.dirs=TRUE))
## [1] "/var/tmp/a/data" "/var/tmp/a/l/data" "/var/tmp/a/q/data"
(/var/tmp/a/l/data
实际上只是一个文件)
但是,你只需要/想要目录,所以如果你有一个相当现代的R安装并安装了purrr
包,那么你可以这样做:
purrr::keep(pre, dir.exists)
## [1] "/var/tmp/a/data" "/var/tmp/a/q/data"
答案 1 :(得分:4)
我认为这是一个古老的问题,但是现在,我们可以使用fs
软件包,根据tidyverse博客和软件包插图“ 提供跨平台,统一的文件系统操作界面“ strong>”和“ 使基本R函数处理文件的某些特质”。
这是我们如何使用state
完成此任务的方法:
export const getUserPosts =
createSelector(
postSelector,
state, ownProps => state.posts.filter(post => post.userId === ownProps.match.params.userId)
)
const mapStateToProps = createStructuredSelector({
posts: getUserPosts,
});
使用这种方法还有其他一些优点:
postSelector
。const mapStateToProps = (state, ownProps) => {
return {
posts: getUserPosts(ownProps.match.params)(state)
}
}
以外的所有目录,可以在上面的代码中添加参数fs
。这两个选项在基本R的fs::dir_ls(path = c("C:/", "E:/"), type = "directory", glob = "*MyFiles", recurse = TRUE)
和recurse = #num_levels_to_recurse)
函数中不可用。请检出this document,以比较文件的MyFiles
函数和基本R函数系统操作。