2016-12-02 4 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에 저장된 임의의 숫자로 결정됩니다. 마지막으로 위에 표시된대로 길이 100-1000의 ATGC 1000 시퀀스의 행렬을 만들려고합니다.

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) 

매트릭스를 반복하여 올바르게 반복하고 붙여 넣기 기능을 특정 길이의 문자열에 적용하는 방법을 잘 모릅니다. 나는 루프를 시도했지만 내가 정확하게 문제를 이해한다면 당신은 무작위로 샘플링 값 길이 5 c("A","C","G","T") 등의 순서를 기대하고 5 clusterSeqLengths[1,1]에있는 경우는, 나에게 아주 멀리

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

2 코드의 함수 정의 나에게 오히려 이상하게 보일 각 셀에 기능 f을 적용 index = c(1,2)apply를 사용, 그래서 편집하려고하지 않았다. 제발, 다시 확인하고 수정하십시오. – Uwe

답변

0

을하지 않았다 최종 출력의 단일 문자열 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" 

그런

(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