2014-02-23 67 views
0

因此,我有一個矩陣TMatrix,我正在騎車通過,我想將包含非限定值的每個單元格的行和列名稱放到表中。我試圖做到以下幾點,但我一直在爲行和列名稱獲取NA。這是怎麼回事?檢索R中的行和列名稱

AA <- 1:rowlength 
    BB <- 1:ncol(Nmatrix) 
    for(i in AA){ 
     for(j in BB){ 
      if (is.finite(TMatrix[i,j])==FALSE){ 
       TNS <- matrix(data=NA,nrow=1,ncol=4) 
       TNS[1,1] <- TMatrix[i,j] 
       TNS[1,2] <- Nmatrix[i,j] 
       TNS[1,3] <- paste(rownames(TMatrix)[TMatrix[i,j]]) 
       TNS[1,4] <- paste(colnames(TMatrix)[TMatrix[i,j]]) 
       TMinf <- rbind(TMinf,TNS) 
      } 
      PMatrix[i,j] <- pt(TMatrix[i,j],n1+n2-2) 
     } 
    } 

回答

0

沒關係,我想通了。我的索引錯了。它應該是這樣的:

AA <- 1:rowlength 
BB <- 1:ncol(Nmatrix) 
for(i in AA){ 
    for(j in BB){ 
     if (is.finite(TMatrix[i,j])==FALSE){ 
      TNS <- matrix(data=NA,nrow=1,ncol=4) 
      TNS[1,1] <- TMatrix[i,j] 
      TNS[1,2] <- Nmatrix[i,j] 
      TNS[1,3] <- rownames(TMatrix)[i] 
      TNS[1,4] <- colnames(TMatrix)[j] 
      TMinf <- rbind(TMinf,TNS) 
     } 
     PMatrix[i,j] <- pt(TMatrix[i,j],n1+n2-2) 
    } 
} 
1

不知道,因爲你提供我們需要運行這個對象的零,這是幹什麼的,但它聽起來像你想要做的東西在下面的例子:

mat <- matrix(rnorm(20), nrow = 4) 
mat[1, 4] <- mat[3, 2] <- NA 


#    [,1]  [,2]  [,3]  [,4]  [,5] 
# [1,] 0.11025848 1.1021023 -0.3098129   NA -0.1358902 
# [2,] 0.00351275 0.1440906 1.2141437 0.2601651 0.2504035 
# [3,] -1.11565805  NA 0.1483867 -0.4102958 -0.3104319 
# [4,] 0.34785864 1.5319365 1.2750632 0.1259548 -0.7594117 

which(!is.finite(mat), arr.ind = TRUE) 

#  row col 
# [1,] 3 2 
# [2,] 1 4 

如果你的行/列,名稱爲:

colnames(mat) <- LETTERS[1:5] 
rownames(mat) <- letters[1:4] 

#    A   B   C   D   E 
# a 0.11025848 1.1021023 -0.3098129   NA -0.1358902 
# b 0.00351275 0.1440906 1.2141437 0.2601651 0.2504035 
# c -1.11565805  NA 0.1483867 -0.4102958 -0.3104319 
# d 0.34785864 1.5319365 1.2750632 0.1259548 -0.7594117 

idx <- which(!is.finite(mat), arr.ind = TRUE) 

rownames(mat)[idx[ , 'row']] 
# [1] "c" "a" 

colnames(mat)[idx[ , 'col']] 
# [1] "B" "D"