一些 spatstat 函数,例如crossing.psp
不允许在函数内分配标记。我正在使用 for 循环和 lapply 命令制作一个复杂的函数,它需要标记ppp
和psp
对象。我在使用函数时尝试为这些对象分配标记时遇到问题。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
工作如下:
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 对象分配标记?