苦恼于Mapply

3

我知道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循环?
1个回答

4

如果您不想遍历参数,请将它们放入MoreArgs=参数中。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接