2017-02-18 2 views
1

Ich möchte nur die Zeilen, die die Teilzeichenfolge und dann die Teilzeichenfolge Teilmenge enthalten. Ich kann den ersten Teil tun, aber ich weiß nicht, wie der Teil entfernenSubset ein DNAStringSet von Untermuster und entfernen Untermuster in R

Hier ist ein Beispiel

library(Biostrings) 
myseq <-DNAStringSet(c("CCCATGAAAGATCGGAAGAGCACACGTCTGAACCCATGAA", "CCCATGAACATAGATCC", "CCCGTACAGATCACGTG")) 
names(myseq) <- letters[1:3] 
myseq 

A DNAStringSet instance of length 3 
width seq                           names    
[1] 40 CCCATGAAAGATCGGAAGAGCACACGTCTGAACCCATGAA                 a 
[2] 17 CCCATGAACATAGATCC                       b 
[3] 17 CCCGTACAGATCACGTG                       c 

Die Reihenfolge Ich mag AGATCGGAAGAGCACACGTCTGAA entfernen, die in der ersten Zeile.

matchPattern("AGATCGGAAGAGCACACGTCTGAA", myseq[[1]]) 

Views on a 40-letter DNAString subject 
subject: CCCATGAAAGATCGGAAGAGCACACGTCTGAACCCATGAA 
views: 
    start end width 
[1]  9 32 24 [AGATCGGAAGAGCACACGTCTGAA] 

die Teilmenge I wie folgt vor:

pat <- vmatchPattern("AGATCGGAAGAGCACACGTCTGAA", myseq) 
myseq[ lapply(lapply(pat, isEmpty), function(x) x == FALSE) ] 

A DNAStringSet instance of length 3 
    width seq                           names    
[1] 40 CCCATGAAAGATCGGAAGAGCACACGTCTGAACCCATGAA                 a 
[2]  0                            b 
[3]  0                            c 

Der Ausgang

A DNAStringSet instance of length 3 
    width seq                           names    
[1] 11 CCCCCCATGAA                         a 
[2]  0                            b 
[3]  0                            c 

Antwort

1

Sie vcountPattern Einstimmungen innerhalb einer ifelse Anweisung ersetzt Einstimmungen mit der Ausgabe der str_replace und nicht zu zählen, verwenden zu entfernen -matches mit leeren Saiten:

myseq2 <- DNAStringSet(
      unlist(
       lapply(
       vcountPattern(
       'AGATCGGAAGAGCACACGTCTGAA', myseq) > 0, 
        ifelse, 
        str_replace(
        myseq, 
        'AGATCGGAAGAGCACACGTCTGAA', 
        ''), 
       '') 
      ) 
      ) 
names(myseq2) <- names(myseq) 
myseq2 

>A DNAStringSet instance of length 3 
>width seq              names    
>[1] 16 CCCATGAACCCATGAA          a 
>[2]  0               b 
>[3]  0               c 

leicht lesbarer mit Rohr Notation:

lapply(vcountPattern('AGATCGGAAGAGCACACGTCTGAA', myseq) > 0, ifelse, str_replace(myseq, 'AGATCGGAAGAGCACACGTCTGAA', ''), '') %>% 
    unlist() %>% 
    DNAStringSet() -> myseq2 
0

ich mit dem Bioinformatik-Paket bin nicht vertraut sein sollte, aber wenn Sie in Ordnung sind mit den Datenumwandlungs Um zu listen (ich bin mir sicher, dass es möglich sein sollte, die Liste in das im Paket verwendete Format zu konvertieren), kann der folgende Ansatz verwendet werden:

1) Verwenden stringr Bibliothek das gewünschte Muster 2) berechnen, die Länge des neuen Musters könnten

# load biostrings package 
library(Biostrings) 

# create sample dataset 
myseq <-DNAStringSet(c("CCCATGAAAGATCGGAAGAGCACACGTCTGAACCCATGAA", "CCCATGAACATAGATCC", "CCCGTACAGATCACGTG")) 
names(myseq) <- letters[1:3] 

# remove sequences with no match 
pat <- vmatchPattern("AGATCGGAAGAGCACACGTCTGAA", myseq) 
data <- myseq[ lapply(lapply(pat, isEmpty), function(x) x == FALSE) ] 

# load stringr library 
library(stringr) 

# replace the matched sequence 
test <- lapply(test, str_replace, "AGATCGGAAGAGCACACGTCTGAA", "") 
# put together the new sequence and its length 
test <- mapply(c, lapply(test, nchar), test, SIMPLIFY = FALSE) 
Verwandte Themen