2016-12-02 73 views
0

我想創建一個不同長度的字符串矩陣。使用矩陣的整數值來確定字符串矩陣中的字符串的長度

到目前爲止,我還沒有能夠正確訪問矩陣中的元素,以便將它們應用到新的元素中。

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) 

^這些很好


有了這些功能,我想一定的概率文字應用到一個單獨的矩陣。 (字符串矩陣),使得矩陣內的每個字符串由存儲在上述隨機Nums Vec中的隨機數之一確定。最後,我正在尋找如上所述的1000個長度爲100到1000的ATGC序列的矩陣。

lengthSmallString <- function(clusterSeqLengths) 
        clusterSeqs <- paste(sample("A", "C", "G", "T"),    c     clusterSeqLengths,replace=TRUE ,prob=c(0.2, 0.55, 0.1,    .     .15)) 

fillCharsToLength <- function(clusterSeqs) 

        clusterSeqs <- apply(clusterSeqs, 2, lengthSmallString, simplify = TRUE, USE.NAMES 
        = FALSE) 

我不完全確定如何正確地遍歷矩陣並將粘貼函數應用於一定長度的字符串。我試圖for循環,但它並沒有讓我很遠

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

在第二代碼片段的功能定義看起來比較奇怪的我,所以我沒有嘗試進行編輯。請仔細檢查並糾正。 – Uwe

回答

0

如果我正確理解你的問題,如果你有一個在clusterSeqLengths[1,1] 5你期待隨機採樣值長度爲5 c("A","C","G","T")作爲序列最終輸出clusterSeqs[1,1]中的單個字符串,並且您想對clusterSeqLengths中的每個單元重複此過程。在這種情況下,您可以使用apply來做到這一點。

我修改了您的示例,使問題的數量和大小更小,以在我的文章中顯示結果。

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" 

然後用applyindex = c(1,2)的功能f適用於每個細胞

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

非常感謝,我衷心感謝您的幫助! –

+0

@MakennaSophiaHerl沒問題。如果答案解決了你的問題,你應該考慮加強或接受這個答案,以便將來的讀者也能受益 – jamieRowen