循环遍历R中文件夹中的所有文件

时间:2016-10-03 09:40:07

标签: r ape

我想从文件夹中导入所有文件,转换文件然后使用相同的名称导出它们,但使用不同的扩展名。在我的具体情况下,我想将150个nexus文件(.nex)转换为fasta文件(.fasta)

如果我逐一执行此代码,这就是代码:

library(ape)
gen1 <- read.nexus.data("gen1.nex") #import nexus file
write.dna(gen1, file = "./fastas/gen1.fasta", format = "fasta") #export fastafile

但是现在我无法在一次运行中完成所有150个文件的for循环。这就是我试过的:

library(ape)
filenames = dir(pattern="*.nex")
for (i in filenames){
i <- read.nexus.data(i)
write.dna(i, file = "./fastas/i.fasta", format = "fasta")
}

当我运行此代码时,我只得到一个名为“i.fasta”的文件,而不是150个名为gen1.fasta,gen2.fasta,DNAsequence1.fasta,DNAsequence2.fasta等的文件。我应该如何更改for-循环以使其正常工作?

3 个答案:

答案 0 :(得分:1)

您需要1)在给出fasta文件名的字符串中包含i的值,2)在您加载nexus文件时不要重写i

library(ape)
filenames = dir(pattern="*.nex")
for (i in filenames){
    dat <- read.nexus.data(i)
    write.dna(dat, file = sprintf("./fastas/%s.fasta", i), format = "fasta")
}

答案 1 :(得分:0)

使用粘贴功能时,

解决方案非常简单:

library(ape)
filenames = dir(pattern="*.nex")
for (f in filenames){
  i <- read.nexus.data(f)
  write.dna(i, file = paste0("./fastas/",f,".fasta"), format = "fasta")
}

答案 2 :(得分:0)

有些不时尚,但效果很好

library(ape)
tmp <- list.files(pattern = "*.nex")
genes <- lapply(tmp, read.nexus.data)
for (i in 1:length(tmp))
  write.dna(genes[[i]], file = paste(tmp[i], ".fasta"), format = "fasta")