9

When I use write.fasta in seqinr, the file that it outputs looks like this:

>Sequence name 1

>Sequence name 2

>Sequence name 3
...etc

Sequence 1 Sequence 2 Sequence 3 ...etc

In other words, the sequence names are all at the beginning of the file, and then the sequences are output together at the end of the file.

What I'd like to do is this:

>Sequence name 1
Sequence 1
>Sequence name 2
Sequence 2
>Sequence name 3
Sequence 3
...etc

Is that possible with write.fasta?

Jennifer Collins
  • 243
  • 1
  • 4
  • 9
  • 3
    Could you please post a [reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? For example, post the code that you use to call `write.fasta`, and use `dput` to show what you pass to it? – David Robinson Aug 06 '12 at 00:05

4 Answers4

28

I was having a similar problem. What I did was to convert the vector that contained the sequences to a list and it worked fine.

e.g., write.fasta(as.list(seq),names,file)

jonsca
  • 10,218
  • 26
  • 54
  • 62
Mayela
  • 281
  • 3
  • 3
1

A minimal example:

write.fasta(as.list(c('AAA', 'CCC')), names=c("a", "b"), 
                               as.string=FALSE, file.out="foo.fa")
Vass
  • 2,682
  • 13
  • 41
  • 60
Met
  • 298
  • 2
  • 6
1

I got stuck with this and got some help from a friend. You need to define the sequences in a list here is an example of code where the input from maxquant output is a csv with a column called sequence and a name column called 'leading razor protein':

library(tidyverse)
library(seqinr)
MU = read_csv('data.csv')
seqs = as.list(dplyr::pull(MU, Sequence))
names = dplyr::pull(MU, `Leading razor protein`)
write.fasta(seqs, names, "MU.fasta",
            open = "w", as.string = FALSE)
Denis
  • 11
  • 1
0

Actually, I always obtain it the right way, and it never happened to me to have a problem similar to yours. Try this.

Copy this text below:

>seq1
agctgtagtc
>seq2
agtctctctt
>seq3
atgtataaaa

Save it as "test.fasta". Then in R do the following

my.dna<-read.fasta("test.fasta")
write.fasta(sequences=my.dna,names=names(my.dna),file.out="write.my.dna.fasta")

If you open "write.my.dna.fasta" you will then obtain the following:

>seq1
agctgtagtc
>seq2
agtctctctt
>seq3
atgtataaaa
Fabio Marroni
  • 423
  • 8
  • 19
  • 1
    My own answer was wrong, please disregard it. It worked only because I already read using seqinr, which reads sequences as lists. The thing to do is what mayela suggested. – Fabio Marroni Dec 07 '19 at 08:01