Некоторые функции сплющивания, такие как crossing.psp
, не позволяют назначать метки внутри функции. Я делаю сложную функцию для команд loop и lapply, которая вызывает отметки в ppp
и psp
объектах. Я испытываю проблемы при попытке назначить marks этим объектам, когда я использую функции get()
. Обычно я использовал бы функцию assign
в этих случаях, но не могу заставить ее работать. Вот пример:Как назначить метки объектам с плавающей точкой внутри циклов/применять команды?
library(spatstat)
win <- owin(c(0,1), c(0,1))
p1 <- ppp(0.1, 0.3, window = win)
p2 <- ppp(0.2, 0.4, window = win)
p3 <- ppp(0.4, 0.7, window = win)
points <- c("p1", "p2", "p3")
Для тех, кто не знаком с пакетом, marks
работы followingly:
marks(p1) <- "p1"
То, что я хочу сделать, это (или что-то подобное, что дает желаемый результат) :
for(i in length(points)){
marks(get(points[i])) <- points[i]}
Это, конечно, не работает, потому что я использую оператор присваивания для get
функции. Если я пытаюсь assign
функцию, я получаю сообщение об ошибке
for(i in 1:length(points)) assign(marks(get(points[i])), points[i])
#Error in assign(marks(get(points[i])), points[i]) :
# invalid first argument
# Or following also gives the same error:
for(i in 1:length(points)) assign(x = marks, value = points[i], envir = get(points[i]))
Я также пробовал:
setmarks(mget(points), points)
sapply(seq_along(points), function(i) marks(get(points[i])) <- points[i])
Как я могу присвоить метки для spatspat объектов внутри циклов или используя применять команды?
Этот фрагмент кода содержит некоторые невероятно аккуратные трюки для меня (я никогда не думал о прямом размещении имени объекта в цикле, используя, например, 'i'). Благодаря! Думаю, мне удастся это выяснить, но как бы вы сделали то же самое с 'sapply' /' lapply'? – Mikko