1

首先,我必须对 20m X 30m 矩形中的两个点的坐标进行建模。显然,这些点遵循均匀分布,所以这是我的代码的第一部分:

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

我对第二个点('point2')使用了相同的代码,但分别用 Y1 和 Y2 替换了 X1 和 X2。

然后我必须找到两点之间的距离:

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

现在如果我将 A 定义为点在 5m 到 10m 范围内的事件,我需要找到这个事件的指标变量。这就是我要做的,但我不确定它是否正确:

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

如果我要重复这些命令 1000 次,我将如何存储每个模拟中的值并在 1000 次重复中找到最小和最大分离值?

4

2 回答 2

0

关。使用ifelse或简单地使用矢量化形式来定义您的事件。对于 1000 个样本,您只需使用runif生成 1000 个样本。也没有必要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 回答