【问题标题】:A loop function R to perform the task执行任务的循环函数 R
【发布时间】:2021-06-18 07:49:38
【问题描述】:

我将文件存储在名为 file1.csv、file2.csv、file3.csv....file100.csv 的目录中。我必须运行一系列脚本,将文件名从 1、2、3...100 更改。 脚本就像

a1 <- data2haplohh(hap_file="file1.csv", polarize_vcf=FALSE)

紧随其后

a_1<-subset(a1, min_maf=0.05)

我们如何在 R 中对这些 scipts 运行循环。我正在尝试但遇到错误。

【问题讨论】:

    标签: r loops for-loop


    【解决方案1】:

    lapply 循环中的一种方法 -

    filenames <- list.files(pattern = 'file\\d+\\.csv', full.names = TRUE)
    
    result <- lapply(filenames, function(x) {
      a1 <- data2haplohh(hap_file=x, polarize_vcf=FALSE)
      subset(a1, min_maf==0.05)  
    })
    

    如果您有 100 个文件,result 应该是长度为 100 的列表。

    【讨论】:

    • 感谢您的回复。如果我们需要将 file2 的 a1 更新为 a2,那么正确的方法是什么。我试过 $i 但无法读取文件。我们最终需要按照各自的顺序编写这些输出文件。
    • @DevenderArora 如果您的最终目标是将其写回为新的 csv,请将最后一行更改为 write.csv(subset(a1, min_maf==0.05), paste0(tools::file_path_sans_ext(basename(x)), '_result.csv'), row.names = FALSE),您不需要在全局环境中创建像 a1a2 这样的对象。
    【解决方案2】:

    我们可以这样试试

    list2env(
        setNames(
            lapply(
                seq(100),
                function(i) {
                    subset(
                        data2haplohh(hap_file = sprintf("file%s.csv", i), polarize_vcf = FALSE),
                        min_maf = 0.05
                    )
                }
            ), 
            paste0("a_", seq(100))
        ),
        envir = .GlobalEnv
    )
    

    【讨论】:

    • 感谢它运行顺利的代码。我现在向代码添加了一个步骤,但它没有接缝来识别。继续a_1,我正在运行一个步骤以使用a_2
    猜你喜欢
    • 2019-11-16
    • 2015-10-18
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2013-07-13
    相关资源
    最近更新 更多