Борьба с Mapply

Итак, я понимаю, что mapply будет проходить через массив (или серию массивов) в порядке элементов — мне было интересно, есть ли способ ОСТАНОВИТЬ его от этого для некоторых аргументов…. Позвольте мне объяснить дальше

У меня есть набор точек данных с координатами X и Y… X1 X2 … Xn и Y1 Y2 … Yn У меня есть набор центров с координатами X и Y… Cx1, Cx2, Cx3 и Cy1, Cy2, Cy3 Для каждых данных point Я хочу выяснить, к какому «центру» он ближе всего… (сопоставление кластеров) извините за использование английской версии center

У меня есть рабочая функция, которая принимает координату 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) не получится, потому что в основном он работает

назначить центр (x1, y1, Cx1, Cy1)

назначить центр (x2, y2, Cx2, Cy2)

назначить центр (x3, y3, Cx3, Cy3)

то, что я хочу, чтобы это работало, это:

назначить центр (x1, y1, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

назначить центр (x2, y2, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

назначить центр (x3, y3, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

...

...

назначить центр (xn, yn, (Cx1, Cx2, Cx3), (Cy1, Cy2, Cy3))

есть идеи, как я могу заставить mapply разделить xcoords и ycoords, но оставить центральные координаты в покое? - или я должен просто использовать цикл for?


person Karim Awenat    schedule 04.05.2017    source источник


Ответы (1)


Если вы не хотите перебирать параметры, вставьте их в параметр MoreArgs=

mapply(assignCentre, x, y, 
    MoreArgs=list(xcentres=xcentres, ycentres=ycentres))
person MrFlick    schedule 04.05.2017