2016-12-02 7 views
0

Ich versuche, eine Matrix von Zeichenketten unterschiedlicher Länge zu erstellen.Mit einer Matrix von ganzzahligen Werten, um die Länge von Strings in einer Matrix von Strings zu bestimmen

Bis jetzt konnte ich nicht auf die Elemente in der Matrix zugreifen, um sie auf eine neue Matrix anzuwenden.

ranNumsVec <- runif(1000, min = 100, max = 1000) 

ranNumsVec <- round(ranNumsVec, digits = 0) 


clusterSeqLengths <- matrix(data = ranNumsVec, nrow = 10, ncol = 100, 
          byrow = FALSE, dimnames = NULL) 

clusterSeqs <- matrix(data = NA, nrow = 10, ncol = 100, byrow = FALSE, dimnames = NULL) 

^Das ist feines


Mit diesen Funktionen Ich versuche Zeichen mit bestimmten Wahrscheinlichkeiten zu einer separaten Matrix anzuwenden. (eine Matrix von Zeichenfolgen), so dass jede Zeichenfolge innerhalb der Matrix durch eine der Zufallszahlen bestimmt wird, die in dem obigen Zufallszahlenfeld gespeichert sind. Am Ende möchte ich eine Matrix von 1000 Sequenzen von ATGCs der Länge 100 bis 1000 wie oben angegeben erstellen.

Ich bin nicht ganz sicher, wie man richtig durch die Matrix iteriert und die Einfügefunktion auf eine Zeichenfolge einer bestimmten Länge anwendet. Ich habe versucht, eine for-Schleife, aber es hat mich nicht sehr weit

for(i=1:nume1(array) in clusterVectorNums) 
{ 
    for(j in clusterVectorNums) 
    { 
    seqLength <- ranNumsVec[i,j] 
    clusterSeqs[i,j] <- paste(sample(c("A", "C", "G", "T"), 
    seqLength, replace=TRUE ,prob=c(0.2, 0.55, 0.1, 0.15)), 
    collapse="") 
    } 
} 
+0

Die Funktionsdefinitionen in dem zweiten Code-Schnipsel eher mir seltsam aussehen anzuwenden, so dass ich versuchte nicht, zu bearbeiten. Bitte, überprüfen und korrigieren Sie. – Uwe

Antwort

0

Wenn ich Ihr Problem richtig verstehe, wenn Sie eine haben 5 in clusterSeqLengths[1,1] Sie eine Folge von zufällig abgetasteten Werte erwarten c("A","C","G","T") der Länge 5 als eine einzelne Zeichenfolge in Ihrer endgültigen Ausgabe clusterSeqs[1,1] und Sie möchten diesen Vorgang für jede Zelle in clusterSeqLengths wiederholen. Unter der Annahme, dass dies der Fall ist, können Sie dies unter Verwendung von apply tun.

Ich habe das dargestellte Beispiel so geändert, dass die Anzahl und Größe des Problems kleiner ist, um die Ergebnisse in meinem Post anzuzeigen.

set.seed(1) # initiliase RNG seed for reproducible results 

ranNumsVec <- runif(10, min = 0, max = 5) 
ranNumsVec <- round(ranNumsVec, digits = 0) 
clusterSeqLengths <- matrix(data = ranNumsVec, nrow = 5, ncol = 2, 
          byrow = FALSE, dimnames = NULL) 

# first make a function which takes an n for 
# how long the sequence should be and returns the 
# relevant sequence 
f = function(n){ 
    paste(
    sample(c("A", "C", "G", "T"), 
      n, replace=TRUE ,prob=c(0.2, 0.55, 0.1, 0.15) 
    ), 
    collapse="") 
} 

clusterSeqLengths 

##  [,1] [,2] 
## [1,] 1 4 
## [2,] 2 5 
## [3,] 3 3 
## [4,] 5 3 
## [5,] 1 0 

# check it works on one value 
f(clusterSeqLengths[1,1]) 
## [1] "C" 

Dann apply mit index = c(1,2) verwenden, um die Funktion f jede Zelle

(clusterSeq = apply(clusterSeqLengths,c(1,2),f)) 
##  [,1] [,2] 
## [1,] "C"  "CCCC" 
## [2,] "AC" "CTCCA" 
## [3,] "TCA" "CCT" 
## [4,] "GCTGC" "ATC" 
## [5,] "A"  ""  
+0

Vielen Dank, ich schätze die Hilfe sehr! –

+0

@ MakennaSophiaHerl kein Problem. Wenn die Antwort Ihr Problem löst, sollten Sie diese Antwort aufheben oder akzeptieren, damit auch zukünftige Leser davon profitieren können – jamieRowen

Verwandte Themen