繁体   English   中英

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

[英]loop over all files in folder in R

我想从一个文件夹导入所有文件,转换文件,然后以相同的名称,但以不同的扩展名导出它们。 在我的特定情况下,我想将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个文件。 这是我尝试的:

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循环来制作它工作正常吗?

您需要1)在提供Fasta文件名的字符串中包含i的值,2)在加载您的链接文件时不重写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")
}

使用粘贴功能时,解决方案非常简单:

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")
}

有些不时尚,但效果很好

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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM