1

一部の spatstat 関数でcrossing.pspは、関数内でマークを割り当てることができません。pppオブジェクト内のマークを呼び出す for ループと lapply コマンドを使用して、複雑な関数を作成してい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]}

もちろん、関数に代入演算子を使用しているため、これは機能しませんgetassign関数を試すと、エラーが発生します

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 オブジェクトにマークを割り当てるにはどうすればよいですか?

4

1 に答える 1

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"

入れ子になった関数呼び出しのペア (内側の tomarks<-()と外側の to assign()) の必要性が謎に思われる場合は、R-lang の「サブセット代入」セクションを参照してください。

于 2013-11-20T14:20:41.363 に答える