[R] Probing a protein sequence alignment in R

Ulrich Bodenhofer bodenhofer at bioinf.jku.at
Wed Nov 25 14:45:13 CET 2015

Hi Debra,

As already noted by Boris, the right packages can be found in Bioconductor, namely Biostrings (for handling sets of sequences and pairwise alignments) and msa (for multiple alignments; a package I am maintaining). Your question does not yet clearly indicate to me whether pairwise or multiple sequence alignments are the right choice. If I understand you correctly, this is not the point anyway, since you want a solution how to find out in which positions two aligned sequences differ, right? The following code snippet demonstrates by means of a simple example with two DNA strings how to check where two strings in a pairwise alignment differ:

    seq1 <- DNAString("AGCGAGCGA")
    seq2 <- DNAString("AGGATCGA")
    aln <- pairwiseAlignment(seq1, seq2, type="global",
    substitutionMatrix=nucleotideSubstitutionMatrix(4, -1))
    which(strsplit(as.character(pattern(aln)), split="")[[1]] !=
    strsplit(as.character(subject(aln)), split="")[[1]])

Maybe there are more elegant solutions than this one. This is just a 
quick approach using basic R. Note that the positions are relative to 
the positions in the alignment, which need not be the same as the 
positions in your original "non-mutant" sequence if the alignment 
algorithm has inserted some gaps in this sequence. If you use multiple 
alignments, the approach is basically the same:

    seqs <- DNAStringSet(c(seq1="AGCGAGCGA", seq2="AGGATCGA",
    aln <- msaMuscle(seqs, order="input")
    ## seq1 against seq2:
    which(strsplit(as.character(aln)[1], split="")[[1]] !=
    strsplit(as.character(aln)[2], split="")[[1]])
    ## seq1 against seq3:
    which(strsplit(as.character(aln)[1], split="")[[1]] !=
    strsplit(as.character(aln)[3], split="")[[1]])

I hope this helps.

Best regards,

P.S.: I fully agree with Bert that the Bioconductor support forum would 
be a good place to discuss this.

On Nov 24, 2015, at 12:04 PM, debra ragland via R-help<r-help at r-project.org>  wrote:

> I have 15 protein sequences of 99 amino acids each. After doing some looking around I have found that there are several ways you can read sequences into R and do pairwise or multiple alignments. I, however, do not know how to probe changes at specific positions. For instance, I would like to know the best way to align a standard sequence with one(1) or several mutant sequences and probe each amino acid position that does not match the standard sequence. In other words seq1 = "standard amino acid seq" and seq2 = "mutant seq", align these 2 and then have a way to ask R to report whether there is a change at position 10, or 11, or 12 and so on such that R reports(for example) TRUE or FALSE for this question. Where all the sequences that have a reported TRUE for a change at position X can be grouped against those that do not have a change at this position.I'm not even sure that R is the best way to do this, but it's the only language I'm somewhat familiar with.I hope this makes sense.

More information about the R-help mailing list