2013-04-25 73 views
4

在循環中,我根據測試識別行。我迭代地利用其指數(IDX)原始矩陣(INM)除去的那些行:根據索引刪除循環中的矩陣行

inM <- inM[-idx,] 

有時,IDX是空的,即沒有行滿足測試,從而IDX是整數類型(0)。 從inM中刪除idx會給出一個空矩陣,而不是相同的矩陣。因此,我得到一個空矩陣爲下面的迭代...

是否有一個單線解決方案,以避免這種情況?

+0

是,添加一個條件,以檢查是否IDX是空的。 – 2013-04-25 08:07:20

回答

4

您可以通過使用?setdiff功能避免if

inM <- inM[setdiff(1:nrow(inM), idx), ] 
+0

謝謝!它奇蹟般的! – WAF 2013-04-25 08:23:56

+0

'if(length(idx))inM < - inM [-idx,]'比這更有效,特別是如果矩陣很大並且idx通常是空的。最好說「什麼也不做」,而不是說「再次賦予inM'所有元素」這就是這個答案的作用 – sieste 2013-04-25 08:42:37

+0

@sieste基於一個解決方案,如果它肯定比setdiff更高效,即使這個解決方案是聰明 – droopy 2013-04-25 09:05:15

0

,你可以在你的循環添加一個條件,例如:

if (length(idx)==0) 
    next 

這樣如果沒有要刪除的行傳遞給下一次迭代。

+0

謝謝!有沒有辦法避免'如果'? – WAF 2013-04-25 08:15:01