使用R - 如何在所有驱动器(硬盘驱动器和USB驱动器)上搜索文件/文件夹

时间:2016-07-10 11:08:52

标签: r

请帮助 - 使用R,我如何在所有驱动器(硬盘驱动器以及连接的USB驱动器)上搜索特定文件/文件夹?

例如,我正在寻找一个名为" MyFiles"的目录,它可以在我的C:或我的USB(E :)上的任何地方。我想知道目录的所有树位置。

感谢您的任何建议!

2 个答案:

答案 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博客和软件包插图“ 提供跨平台,统一的文件系统操作界面”和“ 使基本R函数处理文件的某些特质”。

这是我们如何使用state完成此任务的方法:

export const getUserPosts =
    createSelector(
        postSelector,
        state, ownProps => state.posts.filter(post => post.userId === ownProps.match.params.userId)
    )

const mapStateToProps = createStructuredSelector({
    posts: getUserPosts,
});

使用这种方法还有其他一些优点:

  1. 如果我们对该目录在文件夹层次结构中的位置有大致了解,则可以递归到某个级别,而不用搜索整个树。我们只需要在上面的代码中添加参数postSelector
  2. 此外,如果我们要列出除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函数系统操作。