1
某些spatstat函數(如crossing.psp
)不允許在該函數內分配標記。我正在用for循環和lapply命令編寫一個複雜的函數,它要求在ppp
和psp
對象中標記。當我使用get()
函數嘗試將marks分配給這些對象時,我遇到問題。通常我會在這些情況下使用assign
函數,但無法使其工作。這裏有一個例子:如何將標記分配給循環/應用命令中的spatstat對象?
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環路內的對象或使用應用的命令?
這段代碼包含了一些令人難以置信的整潔技巧(我從來沒有想過直接將對象名稱放在使用'i'的循環中)。謝謝!我想我會弄明白,但是你會如何對'sapply' /'lapply'做同樣的事情? – Mikko