2011-10-02 46 views
0

我對R非常陌生,並且正在努力研究它。我有以下代碼:將嵌套循環的結果寫入R的另一個向量

repeat { 
    if (t > 1000) 
     break 
    else { 
     y1 <- rpois(50, 15) 
     y2 <- rpois(50, 15) 
     y <- c(y1, y2) 
     p_0y <- matrix(nrow = max(y) - min(y), ncol = 1) 
     i = min(y) 
     while (i <= max(y)) { 
      p_0y[i - min(y), ] = (length(which(y1 == i))/50) 
      i <- i + 1 
     } 
     p_y <- matrix(nrow = max(y) - min(y), ncol = 1) 
     j = min(y) 
     while (j <= max(y)) { 
      p_y[j - min(y), ] = (length(which(y == j))/100) 
      j <- j + 1 
     } 
     p_0yx <- p_0y[rowSums(p_0y == 0) == 0] 
     p_yx <- p_y[rowSums(p_0y == 0) == 0] 
     g = 0 
     logvect <- matrix(nrow = (length(p_yx)), ncol = 1) 
     while (g <= (length(p_yx))) { 
      logvect[g, ] = (p_0yx[g])/(p_yx[g]) 
      g <- g + 1 
     } 
     p_0yx %*% (log2(logvect)) 
     print(p_0yx %*% (log2(logvect))) 
     t <- t + 1 
    } 
} 

我很高興一切到最後一行,但不是打印的p_0yx%*%(LOG 2(logvect))到屏幕上的價值我想保存這作爲另一個載體。有任何想法嗎?我試圖做一個類似的方式,在嵌套循環,但似乎沒有工作。

謝謝

回答

6

簡要的答案是首先聲明一個變量。把它放在你發佈在這裏的所有東西之前。我打算叫它溫度。它將保存所有的值。

temp <- numeric(1000) 

然後,而不是你的印刷生產線使用

temp[t] <- p_0yx %*% log2(logvect) 

順便說一句,你的代碼做一些奇怪的事情。看看p_0y的第一個索引。它實際上是該矩陣中項目0,的索引。 R從1開始索引。當您在該矩陣中創建行數時,您使用max(y) - min(y)。如果最大值爲10,最小值爲1,那麼只有9行。我打賭你真的想添加一個。而且,你的代碼和所有不必要的while循環都非常類似。例如,你的整個最後的循環(和logvect的初始化)可以被替換爲:

logvect = (p_0yx)/(p_yx) 

但回到錯誤..和一些Rness ...可以在下面的代碼...

p_0y <- matrix(nrow = max(y) - min(y), ncol = 1) 
i = min(y) 
while (i <= max(y)) { 
    p_0y[i - min(y), ] = (length(which(y1 == i))/50) 
    i <- i + 1 
    } 

也許可以更正確地替換?

p_0y <- numeric(max(y) - min(y) + 1) 
p_0y[sort(unique(y1)) - min(y1) + 1] = table(y1)/50 
p_0y <- matrix(p_0y, ncol = 1) 

(你的代碼的其餘部分類似的反思可以消除環路的其餘部分也一樣)