Как установить точечные шаблоны гиперкадра, используя метки из информационного кадра
У меня гиперфрейм с 93 рядами. Каждая строка содержит карту стволов деревьев класса ppp, а также факторы группировки на уровне графика. Фрейм данных меток предоставляет данные для конкретной точки, такие как диаметр, вид и высота для каждой точки. Мне нужно установить точечный шаблон на основе кадра данных меток, а затем запустить функцию Lstst, которая требует объединения данных. Я нашел примеры поднабора меток шаблонов с одной точкой и примеры поднабора гиперкадров на основе столбцов гиперкадра, но я не видел примеров шаблонов поднабора точек гиперфрейма, вызывающих уровни фактора из кадра данных с несколькими метками. Любое руководство будет высоко ценится.
Я могу поднастроить гиперкадр с помощью факторов уровня графика, скажем, a, b и c типов растительности, затем запустить L est для каждого графика, объединить результаты на основе типа растительности и построить график объединенного Lest (стр. 684 из Baddeley et al. др. 2015 предоставляет полезный пример).
Однако я не могу установить точечные шаблоны гиперкадра на основе определенных меток информационного кадра. Я не уверен, что структура моих данных вызывает проблемы, поэтому я включил их ниже, или я просто запутался в коде, который устанавливает метки подкадра данных, связанного с несколькими точечными паттернами гиперкадра (здесь новичок. Списки в списке становятся запутанными).
Построение данных:
z.list <- mapply(as.ppp, X = df.list, W = window.list, SIMPLIFY=FALSE)
#df.list contains x,y coordinates, followed by columns of point specific
#data.
h <- hyperframe(X=z.list)
H <- cbind.hyperframe(h, plot.df1)#combine the point pattern and marks
#with plot level data
Структура данных:
str(H)
'hyperframe': 93 rows and 14 columns
$ X : objects of class ppp
$ PLOTID : factor 0102U001 0104U001 0104U002 ...
$ Group1 : integer 1 2 1 ...
$ Group2 : numeric 2.0 2.5 2.0 ...
str(H[1,]$X) #str of the ppp of the hyperframes first row
List of 1
$ X:List of 6
..$ window :List of 5
.. ..$ type : chr "polygonal"
.. ..$ xrange: num [1:2] 516441 516503
.. ..$ yrange: num [1:2] 3382698 3382804
.. ..$ bdry :List of 1
.. .. ..$ :List of 2
.. .. .. ..$ x: num [1:4] 516503 516502 516441 516442
.. .. .. ..$ y: num [1:4] 3382698 3382804 3382804 3382698
.. ..$ units :List of 3
.. .. ..$ singular : chr "metre"
.. .. ..$ plural : chr "metres"
.. .. ..$ multiplier: num 1
.. .. ..- attr(*, "class")= chr "unitname"
.. ..- attr(*, "class")= chr "owin"
..$ n : int 107
..$ x : num [1:107] 516501 516473 516470 516474 516474 ...
..$ y : num [1:107] 3382801 3382723 3382726 3382734 3382732 ...
..$ markformat: chr "dataframe"
..$ marks :'data.frame': 107 obs. of 3 variables:
.. ..$ DBH_Class: Factor w/ 16 levels "11.25","13.75",..: 7 5 13 12 8 4 9
.. ..$ Ingrowth : Factor w/ 7 levels "DD","I_DD","I_LD_MY",..: 7 6 6 7
.. ..$ PlotID : Factor w/ 93 levels "0102U001","0104U001",..: 1 1 1 1
..- attr(*, "class")= chr "ppp"
- attr(*, "class")= chr [1:5] "ppplist" "solist" "anylist" "listof" ...
Вышесказанное мне кажется правильным, но я заметил, что хотя метки печатаются с помощью функции str, is.multipoint
выходы как FALSE
, Не уверен, что это часть моей проблемы. Следующее прекрасно работает для факторов уровня графика, расположенных в строках гиперкадра.
H$L <- with(H, Lest((X),rmax=40))
L.VT.split <- split(H$L, H$VEG_TYPE) #plot level factor
L.VT.pool <- anylapply(L.VT.split, pool)
plot(L.VT.pool,cbind(pooliso, pooltheo, hiiso,loiso)-r~r,
shade=c("hiiso","loiso"),equal.scales=TRUE, main='')
Но как выполнить ту же операцию, используя метки из информационного кадра?
1 ответ
Я не уверен, что понимаю вопрос, но все равно постараюсь дать несколько полезных советов...
Для каждого ряда в H
у вас есть точечный шаблон, который содержит информацию о метке в data.frame
(три колонки называются DBH_Class
,Ingrowth
а также PlotID
). Вот некоторые поддельные данные с этой структурой:
library(spatstat)
set.seed(42)
df1 <- data.frame(x = runif(3), y = runif(3), DBH_Class = factor(1:3),
Ingrowth = LETTERS[1:3], PlotID = letters[1:3])
X1 <- as.ppp(df1, W = square(1))
df2 <- data.frame(x = runif(3), y = runif(3), DBH_Class = factor(1:3),
Ingrowth = LETTERS[1:3], PlotID = letters[1:3])
X2 <- as.ppp(df2, W = square(1))
H <- hyperframe(X = list(X1 = X1, X2 = X2))
H
#> Hyperframe:
#> X
#> 1 (ppp)
#> 2 (ppp)
plot(H$X, which.marks = "Ingrowth")
Для подстановки отдельного точечного рисунка определенной отметкой (Ingrowth
в этом примере) использовать subset
:
X1B <- subset(X1, Ingrowth == "B")
То же самое для каждого шаблона в столбце X
в H
:
H$XB <- with(H, subset(X, Ingrowth == "B"))
H
#> Hyperframe:
#> X XB
#> 1 (ppp) (ppp)
#> 2 (ppp) (ppp)
plot(H$XB, which.marks = "Ingrowth")