与Mapply一起奋斗

时间:2017-05-04 18:05:20

标签: r

所以我理解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,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))

任何想法如何我可以将macoly剥离xcoords和ycoords,但只留下中心线? - 或者我应该只使用for循环?

1 个答案:

答案 0 :(得分:3)

如果您不想迭代参数,请将它们粘贴在MoreArgs=参数

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