Работа с кодом, описывающим кластерный процесс Пуассона в spatstat. Разбираем каждую строчку кода по одной, чтобы понять. Начать легко.
library(spatstat)
lambda<-100
win<-owin(c(0,1),c(0,1))
n.seeds<-lambda*win$xrange[2]*win$yrange[2]
Как только окно определено, я генерирую свои точки, используя функцию случайной генерации.
x=runif(min=win$xrange[1],max=win$xrange[2],n=pmax(1,n.seeds))
y=runif(min=win$yrange[1],max=win$yrange[2],n=pmax(1,n.seeds))
Это можно сразу построить, я знаю, используя функцию ppp.
seeds<-ppp(x=x,
y=y,
window=win)
plot(seeds)
В следующей строке я добавляю метки к объекту ppp, по-видимому, она описывает угол поворота точек, я не понимаю, как это работает прямо сейчас, но это нормально, я выясню позже.
marks<-data.frame(angles=runif(n=pmax(1,n.seeds),min=0,max=2*pi))
seeds1<-ppp(x=x,
y=y,
window=win,
marks=marks)
Первая проблема, с которой я сталкиваюсь, заключается в том, что к объекту ppp добавляются объекты, называемые pops, описывающие заполнение окна. Я понимаю, как получаются значения, это распределение Пуассона с учетом входного значения mu, которое может быть любым значением и общим количеством наблюдений, равным точкам в окне.
seeds2<-ppp(x=x,
y=y,
window=win,
marks=marks,
pops=rpois(lambda=5,n=pmax(1,n.seeds)))
Мой первый вопрос: как можно добавить переменную, не имеющую классификации, в объект ppp? Я проверил документацию по ppp, и там нет упоминания о всплывающих окнах.
Второй вопрос, который у меня возник, касается использования переменных типа double, в следующей строке требуется функция sapply для определения размеров.
dim1<-pmax(1,sapply(seeds1$marks$pops, FUN=function(x)rpois(n=1,sqrt(x))))
Я никогда не видел, чтобы функция $ использовалась дважды, а оператор seed2 $ mark $ pop returns $ недействителен для атомарных векторов. Не могли бы вы объяснить, что здесь происходит?
Большое спасибо.