1

まず、20mX30mの長方形の2点の座標をモデル化する必要がありました。明らかに、これらのポイントは一様分布に従うので、これは私のコードの最初の部分です。

    X1 <- runif(1,0,20)
    X2 <- runif(1,0,30)
    point1 <- c(X1,X2)
    point1

2番目のポイント(「point2」)に同じコードを使用しましたが、X1とX2をそれぞれY1とY2に置き換えました。

次に、2つのポイント間の距離を見つける必要がありました。

    distance <- sqrt(((X1-Y1)^2)+((X2-Y2)^2))

ここで、ポイントが互いに5mから10m以内にあるイベントとしてAを定義する場合、このイベントのインジケーター変数を見つける必要があります。これは私が得たものですが、それが正しいかどうかはわかりません:

    x=0
    if (distance < 10 & distance > 5)
    {
     x=1
    }
    Z <- c(distance,x)

これらのコマンドを1000回繰り返す場合、各シミュレーションの値をどのように保存し、1000回の繰り返しで最小および最大の分離値を見つけるのでしょうか。

4

2 に答える 2

0

選ぶ。ifelseまたは単にベクトル化されたフォームを使用して、イベントを定義します。1000サンプルの場合、必要なのはrunif1000サンプルを生成するために使用することだけです。また、必要はありませんc(X1 , X2)。距離計算でベクトルとして呼び出すことができます。

#Just make 1000 calls to runif 
X1 <- runif(1000,0,20)
X2 <- runif(1000,0,30)
Y1 <- runif(1000,0,20)
Y2 <- runif(1000,0,30)
distance <- sqrt(((X1-Y1)^2)+((X2-Y2)^2))

head(distance)
#[1]  9.050522 19.512849 10.413407  7.736564  2.742174 13.729397

# gives 1 if points are within 5 to 10m of each other
event <- ifelse ( distance >= 5 & distance <= 10 , 1 , 0 )

#Or even better, from @GavinSimpson's comment just use a vectorised form (we use as.nuemric to turn TRUE / FALSE into 1 and 0, but you could leave that out if you wish)
event <- as.numeric( distance >= 5 & distance <= 10 )

head( event )
#[1] 1 0 0 1 0 0

# And the minimum and maximum sepration distance of those events
min(distance[distance >= 5 & distance <= 10])
#[1] 5.017296
max(distance[distance >= 5 & distance <= 10])
#[1] 9.989868
于 2013-03-20T14:52:27.727 に答える
0

ある時点でX1とX2を使用し、後で定義されていないY1を参照します。私はあなたが使いたいと確信しています:

 points <- cbind(X1, X2)

コンテキストは、X1とX2の値を「並列」配置に保ちたいことを示唆しており、次元のないオブジェクトではなくマトリックスを定義することでそれを実現できます。

Rの行列演算を使用して回答された最後の質問:

points1 <- matrix( runif(2000), ncol=2)
points1 <- matrix( runif(2000), ncol=2)
dists <- rowSums( (points1-points2)^2 )
Z <- dists <10 & dists >5
于 2013-03-20T14:52:55.700 に答える