【问题标题】:How can I check the list of numbers are in the range or not如何检查数字列表是否在范围内
【发布时间】:2026-01-21 07:40:01
【问题描述】:

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

如果数字列表小于 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)
}

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

【问题讨论】:

  • for 循环使用变量i 进行索引,但您的向量也称为i,因此索引变量会覆盖向量。更改其中一个名称。

标签: r for-loop if-statement range


【解决方案1】:

您的循环中的问题确实是您使用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]

【讨论】:

    【解决方案2】:

    这是您尝试做的更简短的版本:

    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])
    }
    

    主要问题是您在for 循环中为数字向量和虚拟变量使用了相同的变量i。另外,要将AND 放在一起两个逻辑条件,您应该使用&amp;&amp;,而不是&amp;(后者是AND 的向量化形式)。

    Demo

    【讨论】: