2011-09-14 2 views
1

행렬에 해당 행 및 열 번호를 가져오고 저장하려고합니다 (예 :행렬의 인덱스 된 요소에 해당 행 및 열 번호 찾기

adj.m <- diag(c(3,2,1),nrow = 3, ncol = 3) 

이제 행을 찾고 요소 4 또는 5 또는 그와 일치하는 항목을 찾고 싶습니다. adj.m[4]은 값 (0)을 돌려 주지만 변수에 해당 행과 열 번호 (이 경우 1과 2)를 가져 와서 저장하려고합니다.

나는 간단한 명령을 사용한다고 가정하지만, Rseek 또는 Google이 대답을 반환한다는 질문은 공식화 할 수 없습니다.

답변

1

i 경우 인덱스이고 m 실제로

get_row(4, adj.m) 
get_col(4, adj.m) 

예 다음 i의 행 및 열은

get_row <- function(i, m) (i-1) %% ncol(m) + 1 
get_col <- function(i, m) ((i-1) %/% ncol(m)) + 1 

사용이 얻어 질 수있는 매트릭스 인, 이안의 대답은 아마도 더 자연 스럽습니다. 당신은 내가 which()

x <- matrix(nrow=3, ncol=3, data=seq(1:9)) 
which(x==6, arr.ind=TRUE) 
+0

감사합니다. 전자 솔루션! lain의 대답은 아마도 더 자연스럽지 만 기본적으로 메모리를 소비 할 수있는 두 번째 행렬을 생성합니다. (예 : 1000 * 1000 행렬의 경우) –

3

, 예를 들어,이 또한 두 개 이상의 차원에서 작동

get_row_col <- function(i, m) 
{ 
    x <- array(seq_along(m), dim = dim(m)) 
    which(x == i, arr.ind = TRUE) 
} 

과 같은 기능으로 포장 할 수 있습니다 :

arrayInd(7, .dim=c(3,3)) 
#  [,1] [,2] 
# [1,] 1 3 
1

가 arrayInd 기능을 시도 작동합니다 생각

m <- array(1:24, dim = 2:4) 
get_row_col(1:24, m) 
관련 문제