如何创建for循环来计算向量中落在设定边界之间的值的数量?

时间:2019-04-12 00:05:29

标签: r loops for-loop

我试图通过简单地从每个索引中添加和减去设置值来设置向量的上下边界。然后,我想创建一个循环,告诉我向量中的每个值(i),向量中有多少其他点落在该边界内。

基本上,根据在已建立范围内的值来创建伪密度计算。

我的向量“ v”包含随机值。然后,我向其添加/减去三个以获取上限和下限。但是无法创建一个循环来计算该向量中有多少其他值属于该循环。

v <- c(1, 3, 4, 5, 8, 9, 10, 54)

for (i in v){
  vec2 <- (vec +3 > vec[i] & vec -3 < vec[i])
  }
vec2

我从此代码获得NA。

我也尝试过索引vec +/- 3,但也没有用。

vec2 <- (vec[i] +3 > vec[i] & vec - 3 < vec[i))

我想要的是向量中的每个“ i”值,我想知道在该值+和-3内有多少点。

即第一个值为1:因此上限为4,下限为-2。我希望它计算向量中剩余的剩余值。第一个索引为3(如果包含自身)。

vec2 =(3,4,3,....)

2 个答案:

答案 0 :(得分:1)

您是否正在寻找类似的东西?您的代码不正确,因为您的语法不正确。

abcdef

编辑:在代码中添加注释以说明其功能。

答案 1 :(得分:1)

在您的for循环中,我们可以循环遍历v中的每个元素,创建范围(-3,+3)并检查v中有多少元素属于该范围并将结果存储在新向量vec2中。

vec2 <- numeric(length = length(v))
for (i in seq_along(v)) {
   vec2[i] <- sum((v  >= v[i] - 3) & (v <= v[i] + 3))
}
vec2
#[1] 3 4 4 4 4 3 3 1

但是,您可以使用for

来避免mapply循环
mapply(function(x, y) sum(v >= y & v <= x), v + 3, v - 3)
#[1] 3 4 4 4 4 3 3 1