【问题标题】:Creating a list of files from a list of directories in R从R中的目录列表创建文件列表
【发布时间】:2018-01-16 12:16:47
【问题描述】:

我有一个包含许多目录的列表,每个目录里面有 5 个文件,我想从每个目录中的这些文件中选择一个(例如,让我们说扩展名为 .txt 的那个)并编译这些文件的列表。 txt 文件....如何创建一个从 R 中的目录列表中选择 txt 文件的循环?

【问题讨论】:

  • 像这样使用lapplylapply(dirs,function(x) list.files(x,'.txt$',full.names=TRUE) 其中dirs是您的目录列表

标签: r list for-loop


【解决方案1】:

你可以这样做:

dir(path = ".", pattern = "\\.txt$", full.names = TRUE, recursive = TRUE)

其中path 是包含您要查找的所有文件夹的根目录,pattern 是匹配您感兴趣的文件的正则表达式(在示例中是所有带有.txt 扩展名的文件,@ 987654325@ 返回文件的完整路径,recursive 探索path 中的所有子目录。这将返回一个向量,其中包含与您的查询匹配的文件的完整路径。

【讨论】:

  • 谢谢你sinQueso!
【解决方案2】:

如果您有dirs 中的目录名称列表, 您可以通过以下方式将所有.txt 文件作为向量获取:

files <- unlist(lapply(dirs, function(dir) list.files(path = dir, pattern = '\\.txt$')))

您可以按照您的要求使用循环来实现相同的目的, 但它不太优雅,我不推荐它:

files <- c()
for (dir in dirs) {
  files <- c(files, list.files(path = dir, pattern = '\\.txt$'))
}

【讨论】:

    【解决方案3】:

    list.files 已经是一个矢量化函数,因此您可以将目录矢量传递给它,无需循环。

    my_dirs <- c("foo/bar", "foo/baz")
    all_text_files <- list.files(my_dirs, pattern = "\\.txt$", full.names = TRUE)
    

    如果你想要一个按目录分隔文件的列表...

    split(all_text_files, dirname(all_text_files))
    

    【讨论】:

    • 谢谢内森!
    猜你喜欢
    • 2015-08-17
    • 2015-06-15
    • 2015-07-14
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2018-12-01
    • 2013-07-27
    • 2021-07-13
    相关资源
    最近更新 更多