2013-05-06 46 views
1

我有一個矩陣,其中每個行向量都有一個名稱。我想查詢行成員資格在我的矩陣,這是我想談談以下爲R代碼:檢查矩陣的行成員

if(mat contains "rowname") 
{ do appropriate task ....} 
else if(mat contains "otherrowname") 
{ do appropriate task ....} 
else 
{ do different task....} 
  1. 我怎樣才能在一個矩陣測試行成員資格?

所有幫助表示讚賞!

回答

2

這是相當普遍地看到如下所示的代碼:同時

if(sum(rowNameToFind %in% rownames(mat))) { TRUE }else{ FALSE } 

這涉及在同一時間爲目標不可─的rownames缺失,完全可能在-rownames。

+0

我想你搞錯了。無論'mat'上設置了什麼行名稱,只要rowNameToFind的長度大於'0',它就會計算爲TRUE。我錯過了什麼嗎? – 2013-05-08 02:16:31

+0

我發現你的觀點令人信服。如何使用sum()? – 2013-05-08 06:29:32

+0

是的,使用sum()的作品非常好。 – 2013-05-08 11:30:53

0

只要每一行都有一個rowname你可以做到以下幾點:

> if("somerowname" %in% rownames(somematrix)) 
+ { print("true") } else print("false") 
[1] "true" 

我希望這有助於和代碼是明確的!

2

矩陣可能會或可能不會有rownames爲您指數。您可以使用%in%運算符爲它們編制索引。這裏有一個簡單的例子:

#Sample matrix 
mat <- matrix(rnorm(100), ncol = 10) 
#Find the row 'b' 
rowNameToFind <- "b" 


if (is.null(rownames(mat))) { 
    print("no rownames to index!") 
} else if (rowNameToFind %in% rownames(mat)) { 
    print("hurrary") 
} else { 
    print("boo") 
} 

#Returns 
[1] "no rownames to index!" 

#Define the rownames 
rownames(mat) <- letters[1:10] 


if (is.null(rownames(mat))) { 
    print("no rownames to index!") 
} else if (rowNameToFind %in% rownames(mat)) { 
    print("hurrary") 
} else { 
    print("boo") 
} 

#Returns 
[1] "hurrary"