2016-10-03 13 views
0

フォルダからすべてのファイルをインポートし、ファイルを変換してから同じ名前でエクスポートしますが、別の拡張子を付けてエクスポートします。私は150個のネクサスファイル(.nex)はFASTAファイルに変換したい私の特定のケース(.fasta)R内のフォルダ内のすべてのファイルをループするR

ではこれは私がそれを一つずつをすれば、コードがどのように見えるかです:

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

しかし、今私for-loopを1回の実行で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」という名前のファイルではなくgen1.fastaという名前のファイル150、gen2.fasta、DNAsequence1.fasta、DNAsequence2.fastaを取得しますどのようにfor-loopを変更して正しく動作させるべきですか?ペースト機能を使用する場合に

+1

あなたは 'paste0( "./ fastas /"、I)' – akrun

+1

や 'はsprintf( "./ fastas /%のs.fasta"、i)は' – plannapus

+0

は、あなたのコメントをあなたの両方に感謝する必要があるかもしれません。 "paste0"では、エラーが発生します:内部の 'paste'に対する非文字列引数。 sprintfではエラーが出ます:サポートされていないタイプ – PaulH

答えて

1

あなたは1が必要です)FASTAファイル名、2を与える文字列内のiの値が含まれる)、あなたをロードしているとき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") 
} 
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") 
} 
関連する問題