[英]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.