2017-05-04 4 views
2

So verstehe ich, dass Mapply durch ein Array (oder eine Reihe von Arrays) in der Reihenfolge der Elemente Schritt - ich fragte mich, ob es einen Weg, um es auf einige der Argumente zu stoppen ... war. Lassen Sie mich weiter erklärenSchwierigkeiten mit Mapply

Ich habe eine Reihe von Datenpunkten, mit X-und Y-Koordinaten ... X1 X2 ... Xn und Y1 Y2 ... Yn Ich habe eine Reihe von Zentren, mit X-und Y-Koordinaten ... Cx1, Cx2, Cx3 und Cy1, Cy2, Cy3 für jeden Datenpunkt möchte ich finden sie heraus, welche „center“ ist es am nächsten ... (Cluster-Matching) Entschuldigungen für die Verwendung der Englisch-Version von Mitte

ich habe eine Arbeits bekam Funktion, die eine X-Koordinate und eine Y-Koordinate und die Zentren und arbeitet die Entfernung und die nächste Mitte

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)) 
} 

Hier ist das Problem, wenn ich folgendes versuchen: mapply (assignCentre, xcoords, ycoords, xcentres, ycentres) es, weil im Grunde versagt es

assignCentre läuft (x1, y1, Cx1, Cy1)

assignCentre (x2, y2, CX2, Cy2)

assignCentre (x3, y3, CX3 Cy3)

was will ich es laufen wird:

012.351.

assignCentre (x1, y1, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

assignCentre (x2, y2, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

assignCentre (x3, y3, (Cx1, CX2, Cx3), (Cy1, Cy2, Cy3))

...

...

assignCentre (xn, yn, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

Irgendwelche Ideen, wie ich Mapply dazu bringen kann, XCoords und YCoords auseinander zu ziehen, aber die Coords in der Mitte alleine lassen? - oder sollte ich einfach eine for-Schleife benutzen?

Antwort

3

Wenn Sie nicht über Parameter zu durchlaufen wollen, bleiben sie in der MoreArgs= Parameter

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