2017-01-27 4 views
0

Я пытаюсь создать матрицу, в которой каждая строка представляет данные из вектора, полученного через цикл for. Мой код ниже приводит только к одному числу в финальной матрице, когда предполагается, что он имеет 5 строк с 60 столбцами. Каждый вектор gene_state должен иметь длину 60, а цель состоит в том, чтобы собрать 5 из них вместе в матрице N = 5.Сохранение результатов вложенного цикла в матрицу в R

set.seed(1) 
N <- 5 
t <- 60 
myMatrix <- matrix(0, nrow=N, ncol=t) 
for(i in 1:N){ 
    gene_state <- 1 
    for(j in 1:t){ 
    randomNum <- runif(1) #runif(1) randomly generates a number between 0 and 1 
    if(gene_state == 1){  # if the gene_state is at 1 
     if(randomNum < 0.1){ # AND if the random number generated is less than 0.1 
     gene_state <- 2 # switch the state to 2 
     } else {  
     gene_state <- 1 # otherwise keep the state at 1 
     } 
    } else {   # if the gene_state is at 2 
     if(randomNum < 0.25){ # and if the random number is less than 0.25 
     gene_state <- 1 # switch the state to 1 
     }else{ 
     gene_state <- 2 # otherwise keep the state at 2 
     } 
    } 
    myMatrix[i,j] <- gene_state 
    } 
} 
+3

Я получаю матрицу 5x60 – rawr

+0

@PaulR Пожалуйста, дайте мне знать, что ваши рассуждения удалить 'для-loop' тег из этого вопроса. – Uwe

+0

@UweBlock: в этом контексте он не казался особенно полезным тегом - я чувствовал, что добавление отсутствующего тега 'r', вероятно, было очень важным, теги' matrix' и 'vector' были пограничными, поэтому я оставил их in, но тег 'for-loop' кажется бесполезным. Это просто мое мнение, хотя, не стесняйтесь добавлять его обратно, если вы считаете, что оно имеет какое-то значение, –

ответ

1

Я предполагаю, что код делает то, что он предназначен для. Я вырезал все комментарии и перестроил последнюю строку

N <- 5 
t <- 60 
myMatrix <- matrix(0, nrow=N, ncol=t) 
for(i in 1:N){ 
    gene_state <- 1 
    for(j in 1:t){ 
     randomNum <- runif(1) 
     if(gene_state == 1){ 
      if(randomNum < 0.1){ 
       gene_state <- 2 
      } else {  
       gene_state <- 1 
      } 
     } else { 
      if(randomNum < 0.25){ 
       gene_state <- 1 
      }else{ 
       gene_state <- 2 
      } 
     } 
     myMatrix[i,j] <- gene_state 
    }} 

, что приводит к матрице 5 x 60.

dim(myMatrix) 
[1] 5 60 
+0

Спасибо! Он работает сейчас, не уверен, почему это дало мне что-то другое на днях ... – Sarah