2016-10-03 176 views
0

我想導入文件夾中的所有文件,轉換文件,然後使用相同的名稱導出它們,但使用不同的擴展名。在我的特定情況下,我想150個承上啓下文件(.nex)轉換爲FASTA文件(.fasta)循環遍歷R中的文件夾中的所有文件

這是怎樣的代碼看起來如果我去做了一個接一個:

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-loop來使其工作正確?使用粘貼功能時

+1

您可能需要'paste0( 「./ fastas /」 I)' – akrun

+1

或'sprintf的( 「./ fastas /%s.fasta」,我)' – plannapus

+0

感謝你們的意見。使用「paste0」,我得到錯誤:內部'粘貼'的非字符串參數;而與sprintf,我得到的錯誤:不支持的類型 – PaulH

回答

1

你需要1)包括i字符串給FASTA文件名中的數值,2)不重寫i當你加載你的nexus文件。

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") 
} 
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") 
} 
相關問題