2014-02-28 36 views
7

我知道這方面已經有一些線索,但通過那些我無法弄清楚問題可能是什麼 - 請原諒我要的..R要替換的項目數量不是替換長度/結果的倍數,但是正確

我試圖運行代碼

for (i in 1:a){ 
    matrix$new_column[i]<-which(matrix[i,1:b-1]==matrix$col_b[i]) 
    } 

什麼,我試圖爲: 對於矩陣一個線和b列,每個 line's列到B-1,查找包含相同的值一個列b(總有這樣的值)的一個和寫入根據列號到* NEW_COLUMN *

我的代碼不斷拋出錯誤

警告矩陣$ NEW_COLUMN [I] < - 這(矩陣[我,:的 項目,以取代數量不是更換長度的倍數

但是,結果是完全正確的。我試圖

  • 創建* NEW_COLUMN *填充有第一
  • 改變從結束索引的0 A-1一個+ 1

如所述,結果是正確的,但是我覺得我不應該得到警告信息,如果我正確地做了一切事情,所以我非常感謝任何關於如何解決這個問題的建議。

最後,不要問我爲什麼我選擇1:b-1,當我想從2跳到b-1時,我剛剛看到,當我使用2:b-1時,它會以列3 ..

+0

這不是一個錯誤,它是一個警告。 –

+0

是的,對不起,我的壞。不過,如果我做得對,不應該發出警告嗎? – tfp

+0

這意味着你的新矢量的長度與生成它的長度不一樣。所以即使結果看起來正確,一些東西也許是不正確的。 –

回答

6

which()如果有多個匹配項,則可以返回一個向量。例如:

which((1:12)%%2 == 0) # which are even? 

matrix$col_b[i]是否唯一?結果可能仍然正確。公告是什麼在這種情況下發生的:

x <- 1:2 
x[1] <- 3:4 
x 

此外,1:b-1不給你從1b - 1的數字,但是從1b數都是負值1,:

b <- 10 
1:b-1 

你需要括號首先強制減法:1:(b - 1)

+0

好的,我沒有預見到我可能有兩個相同的值的情況。修正了它,錯誤消失了 - 謝謝!至於缺少的括號,謝謝你也:) – tfp

相關問題