2013-12-10 7 views
2

n * p 데이터 프레임이 있다고 가정 해 봅니다.빠른 계산을 위해 루프를 수행하는 다른 방법

필자는 아래의 R 스크립트에서 listMat이라는 p * p 차원의 n 행렬 목록을 계산했습니다. 각 행렬은 n 명의 응답자 각각에 대한 p 변수 간의 거리 행렬입니다.

각각의 요소가 각 pairwise 거리 매트릭스의 차이의 표준에 해당하는 normMat이라는 n * n 매트릭스를 계산하고 싶습니다. 예 : normMat [1,2]는 "diffMat"라는 행렬의 표준입니다. 여기서 diffMat는 행렬 "listMat"목록의 첫 번째 거리 행렬과 두 번째 거리 행렬의 차이입니다.

나는 잘 작동하는 다음 스크립트를 작성했지만 루프를 피하기 위해 쓰기에 더 효율적인 방법이 있는지 궁금하다. (예를 들어 lapply 등을 사용하여) 스크립트 실행 속도를 빠르게한다. .

# exemple of n = 3 distances matrix between p = 5 variables 
x <- abs(matrix(rnorm(1:25),5,5)) 
y <- abs(matrix(rnorm(1:25),5,5)) 
z <- abs(matrix(rnorm(1:25),5,5)) 

listMat <- list(x, y, z) 
normMat <- matrix(NA,n,n) 

for (numRow in 1:n){ 
    for (numCol in 1:n){ 
    diffMat <- listMat[[numRow]] - listMat[[numCol]] 
    normMat[numRow, numCol] <- norm(diffMat, type="F") 
    } 
} 

도움 주셔서 감사합니다.

답변

2

시도 :

normMat <- function(x, y) { 
    norm(x-y, type="F") 
} 

sapply(listMat, function(x) sapply(listMat, function(y) normMat(x,y))) 
관련 문제