2017-05-04 2 views
2

그래서 mapply가 요소 순서로 배열 (또는 일련의 배열)을 단계별로 처리 할 것이라는 것을 이해합니다 - 일부 인수에서이를 수행하는 것을 막을 수있는 방법이 있는지 궁금합니다. 다시 설명해 드리겠습니다Mapply로 고생하다

X와 Y 좌표가있는 데이터 세트가 있습니다 ... X1 X2 ... Xn과 Y1 Y2 ... Yn X 좌표와 Y 좌표가있는 집합이 있습니다 ... Cx1, Cx2, Cx3 및 CY1은 CY2, Cy3가 나는 "센터"가 가장 가까운 어떤 발견 할 각 데이터 포인트의 경우 (클러스터 일치) 중심의 영어 버전을 사용하는 사과는

나는 작업있어하는 X 좌표와 Y 좌표와 중심을 취하여 거리와 가장 가까운 중심을 계산하는 함수

assignCentre <- function (x1, y1, xcentres, ycentres) { 
    centredists <- mapply(pointDistance, x1, y1, xcentres, ycentres) 
    nearcentre <- which(centredists == min(centredists))[1] 
    return(list(nearcentre, centredists[nearcentre])) 
} 

pointDistance <- function (x1, y1, x2, y2) { 
    xdist <- (x2 - x1)^2 
    ydist <- (y2 - y1)^2 
    return(sqrt(xdist + ydist)) 
} 
mapply (assignCentre, xcoords, ycoords, xcentres, ycentres) 기본적으로는

assignCentre (X1, Y1, 뺄셈하는 것으로 구할 수, CY1)

을 실행하기 때문에 실패 :

는 여기에 내가 다음을 시도하는 경우, 문제의

assignCentre (X2, Y2, CX2, CY2)

assignCentre가 (X3는, Y3, CX3, Cy3가)이

내가 그것을 실행하려는 것은 :

assignCentre (X1, Y1 (뺄셈하는 것으로 구할, CX2, CX3), (CY1, CY2, Cy3가))

assignCentre (X2, Y2 (뺄셈하는 것으로 구할, CX2, CX3), (CY1, CY2, Cy3가))

assignCentre (X3, Y3 (뺄셈하는 것으로 구할, CX2, CX3), (CY1, CY2, Cy3가))

...

...

assignCentre (XN, YN, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

어떻게하면 xcoords와 ycoords를 분리하고 중심 좌표 만 남기 위해 mapply를 얻을 수 있습니까? 또는 for 루프를 사용해야합니까?

답변

3

당신이 매개 변수를 반복하지 않으려는 경우는 MoreArgs= 매개 변수에 그들을 스틱

mapply(assignCentre, x, y, 
    MoreArgs=list(xcentres=xcentres, ycentres=ycentres))