#r #spatstat
#r #spatstat
Вопрос:
Все,
Я пытаюсь изменить подмножество объекта psp в пакете R spatstat. Вот код, который вызывает у меня проблему:
set.seed(10)
mat <- matrix(runif(40), ncol=4)
mx <- data.frame(v1=sample(1:4,10,TRUE),
v2=factor(sample(letters[1:4],10,TRUE),levels=letters[1:4]))
a <- as.psp(mat, window=owin(),marks=mx)
#subset to marking v1 = 2, modify one of its endpoints
a[a$marks$v1==2]$ends$x0<-rep(5,4)
это выдает мне предупреждение:
Предупреждающее сообщение: В [a $ отмечает $ v1 == 2] $ заканчивается $ x0 <- rep(5, 4) : количество элементов для замены не кратно длине замены
Каков правильный способ изменить некоторые элементы объекта psp? Я обычно использую эту операцию с фреймами данных и не сталкиваюсь с проблемой. Я чувствую, что оператор подмножества ([) не настроен для этой операции с классом psp.
Спасибо за чтение; ценю любую помощь, которая у вас может быть.
Комментарии:
1. Вы уверены, что
a[a$marks$v1 == 2]$ends$x0
имеет длину 3?2. спасибо за примечание — я не обновил предупреждающее сообщение обновлением set.seed для этого поста. Это все еще дает тот же результат
Ответ №1:
Проблема здесь в том, что вы пытаетесь выполнить запись в подмножество psp
объекта. Хотя [
оператор определен для этого класса, чтобы вы могли извлечь из него подмножество, [<-
оператор не определен, поэтому вы не можете перезаписать подмножество.
Однако элемент, который вы пытаетесь перезаписать, является фреймом данных, в котором, конечно, определен [<-
оператор. Итак, все, что вам нужно сделать, это записать в это без подстановки фактического psp
объекта.
Вот полный reprex:
library(spatstat)
set.seed(10)
mat <- matrix(runif(40), ncol = 4)
mx <- data.frame(v1 = sample(1:4, 10, TRUE),
v2 = factor(sample(letters[1:4], 10, TRUE),
levels = letters[1:4]))
a <- as.psp(mat, window = owin(), marks = mx)
#subset to marking v1 = 2, modify one of its endpoints
a$ends$x0[a$marks$v1 == 2] <- rep(5, 4)
a
#> marked planar line segment pattern: 10 line segments
#> Mark variables: v1, v2
#> window: rectangle = [0, 1] x [0, 1] units
Создано 2020-08-18 пакетом reprex (версия 0.3.0)
Ответ №2:
Я приму это как запрос функции на добавление метода для [<-
for class psp
.
Как правило, мы не рекомендуем напрямую изменять компоненты объектов в spatstat
, поскольку это может нарушить их внутреннюю согласованность. Таким образом, метод для [<-
был бы лучшим решением.
Комментарии:
1. Я заглянул во внутренние компоненты
psp
объекта, чтобы убедиться, что эта конкретная операция не нарушила внутреннюю согласованность, и это казалось нормальным. Хотя я понимаю общую картину рекомендаций против такого рода вещей в целом. С точки зрения конечного пользователя, возможно, все, что нужно для[<-
оператора, — это сообщение об ошибке, фактически говорящее «вы не можете этого сделать` — на данный момент сообщение об ошибке неясно.