某些spatstat函数(例如crossing.psp
)不允许在函数内指定标记。我正在使用for循环和lapply命令创建一个复杂的函数,它调用ppp
和psp
对象中的标记。我在使用get()
函数时尝试将marks分配给这些对象时遇到问题。通常我会在这些情况下使用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对象指定标记或使用apply命令?
答案 0 :(得分:1)
这样可以解决问题:
for(i in points) {
assign(i, do.call(`marks<-`, list(x=as.symbol(i), value=i)))
}
## Check a point patter to see that it works
marks(p3)
# [1] "p3"
如果需要一对嵌套函数调用(内部函数调用marks<-()
而外部函数调用assign()
)看起来很神秘,请查看"subset assignment" section of R-lang。