3

出発地と目的地の両方に xy 座標を使用して、空間相互作用モデルのフロー プロットを作成しています。

流れ

問題は、これらの行をプロットするためにネストされた for ループ (1 つは起点、もう 1 つは宛先) を使用し続けており、R にはもっと良い方法があると確信していることです。

とにかく、この質問に答えるのを助けるために、4つの出発地と2つの目的地を持つ単純な再現可能な例を設定しました. より速くプロットするための答えは行列代数にあると思われますが、どこから始めればよいかわかりません。それをテストして、私に知らせてください:

o <- data.frame(x = c(3,5,6,1), y = c(8,2,3,2))
plot(o)
d <- data.frame(x = c(5,3), y = c(5,3))
points(d, col="red", pch=3)
beta <- 0.6

dist <- matrix(sqrt(c(o[,1] - d[1,1], o[,1] - d[2,1] )^2 +
               c(o[,2] - d[1,2], o[,2] - d[2,2] )^2), ncol = 2)
s <- dist

for(i in 1:nrow(o)){
  for(j in 1:nrow(d)){
    s[i,j] <- exp(-beta * dist[i,j])
  }  
}

for(i in 1:nrow(o)){
  for(j in 1:nrow(d)){
   lines(c(o[i,1], d[j,1]), c(o[i,2], d[j,2]), 
         lwd = 2 * s[i,j] / mean(s))
  }  
}

編集- このプロジェクトのコンテキストについては、こちらを参照してくださいhttp://rpubs.com/RobinLovelace/9697

4

1 に答える 1