2012-08-16 2 views
1

이 작은 코드를 작성하고 루프 결과를 요약하는 데 문제가 있습니다. 누군가 그걸 도와 줄 수 있니?R에서 루프의 결과를 요약 해주십시오.

a = array(c(1,1,1,1,1,1,1,2,1,1,1,1,1), dim=c(4,3)) 
b = array(c(0,0,0,0,0,1), dim=c(2,3)) 

dist <- array() 
for (j in 1:2) { 
    for (i in 1:4) { 
    dist <- sqrt (sum ((a[i, ]-b[j, ])^2)) 
    print(dist) 
    } 
} 

나는 결과로 8 개 번호를 얻을 수 있지만 그것은 당신은 당신이가는대로 dist 매트릭스 작성해야

답변

3

의 마지막을 표시 할 수 있습니다. (누군가가 나오면 익명 함수, 편집 주시기 바랍니다 벡터화하기 위해 더 나은 방법을)

dist <- array(dim=c(4,2)) 
for (j in 1:2) { 
    for (i in 1:4) { 
    dist[i,j] <- sqrt (sum ((a[i,1:3]-b[j,1:3])^2)) 
    } 
} 
dist 
+0

이 – questionator

4

다른 방법으로,

(dist <- outer(1:4, 1:2, FUN = Vectorize(function(x,y)sqrt(sum((a[x,]-b[y,])^2))))) 
     [,1]  [,2] 
[1,] 1.732051 1.414214 
[2,] 1.732051 1.414214 
[3,] 1.732051 1.414214 
[4,] 2.449490 2.236068 

1:4이 인덱스 a에 사용되는 outer 기능을 사용할 수 있습니다, 은 b을 나타내는 데 사용됩니다.

+0

이 – questionator

2

또한 붙박이 dist 기능을 사용하여 모든 루프

dist 유클리드 거리 (가능성의 수에서 기본값)을 계산하기위한 중첩 방지 할 수있다. 이것은 당신이 원하는 것으로 보입니다.

# give a and b some rownames 

row.names(a) <- paste0('a',1:nrow(a)) 
row.names(b) <- paste0('b',1:nrow(b)) 
#combine into one matrix 
ab <- rbind(a,b) 

# get the distance between the points 

distances <- as.matrix(dist(ab)) 

# subset those you are interested in 
distances[row.names(a),row.names(b)] 

##   b1  b2 
## a1 1.732051 1.414214 
## a2 1.732051 1.414214 
## a3 1.732051 1.414214 
## a4 2.449490 2.236068 
+0

가 대단히 감사합니다 대단히 감사합니다 대단히 감사합니다 자세한 내용은 ?dist을 참조하십시오 – questionator

관련 문제