Аргумент by
не распознается функцией nndist.ppx
, которую вы используете в этом примере.
Это касается "классов и методов" в R
. Функция nndist
является общей; когда вы вызываете nndist
для объекта класса "ppx"
, система вызывает функцию nndist.ppx
, которая является «методом» для этого класса.
Вы можете проверить возможности nndist.ppx
, посмотрев его файл справки; он не поддерживает аргумент by
.
Существуют другие методы nndist
, которые распознают аргумент by
, например nndist.ppp
, и я полагаю, вы просматривали документацию для этого.
Мы обновим код в spatstat
, чтобы эта возможность была доступна и для nndist.ppx
.
Тем временем вы можете использовать функцию nncross.ppx
, чтобы найти ближайшие расстояния от одной группы точек к другой. Вот как получить желаемый результат:
Y <- split(pointpattern) # divide into groups
m <- length(Y) # number of groups
n <- npoints(pointpattern)
result <- matrix(, n, m) # final results will go here
partresults <- list() # collect results for each group here
for(i in 1:m) {
Yi <- Y[[i]]
ni <- npoints(Yi)
a <- matrix(, ni, m)
a[,i] <- nndist(Yi)
for(j in (1:m)[-i])
a[,j] <- nncross(Yi, Y[[j]], what="d")
partresults[[i]] <- a
}
split(result, marks(pointpattern)) <- partresults
Тогда result
- это матрица расстояний, которую вы хотели.