2016-10-03 5 views
0

폴더에서 모든 파일을 가져오고 파일을 변환 한 다음 동일한 이름으로 내보낼 수 있지만 확장자는 다릅니다.R 폴더에있는 모든 파일을 덮어 씁니다.

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

을하지만 지금 내 특정 경우에는 내가 FASTA 파일 (.fasta)

나는 하나 그것을 하나를 수행하는 경우이 코드는 모습입니다 150 개 넥서스 파일 (.nex를) 변환 할 for-loop가 한 번의 실행으로 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

당신은'paste0 ("./ fastas /", 나는)' – akrun

+1

또는'의 sprintf ("./ fastas/%의 s.fasta", i)는' – plannapus

+0

는 귀하의 의견 주셔서 모두 감사를해야 할 수도 있습니다. "paste0"을 사용하면 오류가 발생합니다. 내부 'paste'에 대한 문자열이 아닌 인수; sprintf를 사용하면 오류가 발생합니다. 지원되지 않는 유형 – PaulH

답변

1

당신은) 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") 
} 
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") 
}