从R中的指标变量获取值

时间:2013-03-20 14:45:34

标签: r statistics

首先,我必须在20米X 30米的矩形中模拟两点的坐标。显然这些点遵循统一分布,所以这是我的代码的第一部分:

    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次重复中找到最小和最大分离值?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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