我知道mapply会按照元素顺序遍历数组(或一系列数组)- 我想知道是否有一种方法可以阻止它在某些参数上执行此操作... 让我进一步解释一下
我有一组数据点,具有X和Y坐标... X1 X2 ... Xn和Y1 Y2 ... Yn 我有一组中心,具有X和Y坐标... Cx1,Cx2,Cx3和Cy1,Cy2,Cy3 对于每个数据点,我想找出它最接近的“中心”...(聚类匹配) 抱歉使用了英文版的“centre”
我有一个工作正常的函数,它需要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, Cx1, Cy1)
assignCentre(x2, y2, Cx2, Cy2)
assignCentre(x3, y3, Cx3, Cy3)
我想要它运行的是:
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))
有什么想法可以让mapply分离xcoords和ycoords,但保留中心坐标?- 还是应该使用for循环?