如何检查数字列表是否在范围内

时间:2018-03-22 14:21:16

标签: r for-loop if-statement range

我想验证数字列表是否在范围内。

如果数字列表小于33且大于38,我希望这些数字与他们的订单一起返回。

i<-c(33,34,35,36,37,38,80,100)
for (i in 1:length(i)) {
  if ( 33 < i & i < 38 ) {
   next
  }
  print(i)
}

但它会返回所有内容,即使它不应该

2 个答案:

答案 0 :(得分:0)

以下是您尝试执行的操作的简短版本:

vec <- c(33, 34, 35, 36, 37, 38, 80, 100)
vec[!vec %in% c(34:37)]
[1]  33  38  80 100

如果您还想更正当前​​代码,请考虑以下更新版本:

for (i in 1:length(vec)) {
    if (33 < vec[i] && vec[i] < 38) {
        next
    }
    print(vec[i])
}

主要问题是您对i循环中的数字向量和虚拟变量使用相同的变量for。另外,对于AND两个逻辑条件,您应该使用&&,而不是&(后者是AND的矢量化形式)。

Demo

答案 1 :(得分:0)

循环中的问题确实是你使用i作为矢量名和索引变量。以下是使用重命名的索引变量

的代码的工作版本
i<-c(33,34,35,36,37,38,80,100)
for (j in 1:length(i)) {
   if (! ( 33 < i[j] & i[j] < 38 )) {
       print(i[j])
   }
 }

顺便说一下,使用R是面向矢量的这一事实,这是一种更紧凑的方式:

indexes <- which(i > 33 & i < 38)
i[indexes]