【问题标题】:Loop for directories and files in RR中的目录和文件循环
【发布时间】:2021-02-01 10:06:55
【问题描述】:

我对脚本的循环有疑问。我有不同的目录,每个目录都有不同的文件。我的脚本同时分析两个文件。例如,我有 file1、file2、file 3 和 file 4。我的脚本在 file1-file2 中进行分析,然后我必须执行 file1-file3、file1-file4 和 file2-file3 等等。所以我必须不重复地分析每个文件和所有其他文件。我正在做类似的事情

dirs <- list.dirs()

for (d in dirs) {

files <- list.files()

a <- read.table("file1") ##what I have to write here? 
b <- read.table("file2")  ## and here?
dm <- dist(a, b , method = "euclidean")
write.table(dm, "file1-file2.csv")
}

我的问题是关于在列出它们之后调用 file1 和 file2(以及其他)。格式名称文件类似于“1abc_A.txt” 谢谢你:)

【问题讨论】:

    标签: r loops file directory


    【解决方案1】:

    尝试以下方法:

    • 使用lapply 循环遍历每个目录。
    • 对于每个目录,使用 list.files 获取所有文本文件名。
    • 创建 2 个文本文件的每个组合,并将 dist 函数应用于每 2 个文件。
    • 写入输出。如果目录名为A,文件名为f1f2。它应该在工作目录中写入一个名为A_f1_f2.csv 的文件。
    dirs <- list.dirs()
    
    lapply(dirs, function(y) {
      files <- list.files(y, pattern = '\\.txt') 
      if(length(files) < 2) return(NULL)
    
      combn(files, 2, function(x) {
        a <- read.table(x[1]) 
        b <- read.table(x[2])
        dm <- dist(a, b , method = "euclidean")
        write.table(dm, sprintf('%s_%s.csv', basename(y), paste0(x, collapse = '_')))
      }, simplify = FALSE)
    })
    

    【讨论】:

    • 我得到了这个:combn(files, 2, function(x) { : n 中的错误
    • 1) 检查dirs 返回什么,如果dirs 是您要迭代的所有目录。 2)另请参阅更新的答案。
    • dirs 返回 99 个目录,但目录是 98 个。这里是“.” “./6w41” “./6wps” “./6wpt” “./6xc2” “./6xc3”。另外,有了更新的答案,我没有以前的错误,但没有找到文件 ".txt" ,似乎 R 没有打开第一个目录
    • 使用dirs &lt;- list.dirs()[-1] 删除第一个目录并使用上述答案。
    • 目录没问题,现在我收到文件名错误。 read.table(x[1]) : 未找到输入文件:检查文件名
    猜你喜欢
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2013-09-20
    相关资源
    最近更新 更多