all()函数未按预期工作

时间:2015-05-24 18:43:27

标签: r

我有一个向量,我想确保它的所有值都在1800到900之间

所有值都是整数。

我这样做了:

areThereOutRangedTimeValues <- function (time){
  valuesGreaterThan <- time > 1800
  if(all(valuesGreaterThan) == FALSE){
  valuesLessThan <- time< 900
  if(all(valuesLessThan) == FALSE){
    return (FALSE)
  }
  else
  {
    return (TRUE)
  }
  }else{
    return (TRUE)
  }
}

我不知道为什么当我这样测试时:

areThereOutRangedTimeValues(c(1:1801))

答案是FALSE,即使它应该是TRUE

2 个答案:

答案 0 :(得分:6)

问题是

all(valuesGreaterThan) == FALSE

应该是(注意括号)

all(valuesGreaterThan == FALSE)

valuesLessThan

相同

然而,这似乎是一种非常复杂的做法

any(time<900 | time>1800)

答案 1 :(得分:1)

以尼科的答案为基础。如果你想要一个功能:

OutRanged <- function(time) {
  any(time < 900 | time > 1800)
}

OutRanged(1:1801)
[1] TRUE

如果需要,您还可以通过更改范围来使其更有用。

OutRanged <- function(time, lower=900, upper=1800) {
  any(time < lower | time > upper)
}

所以现在你仍然可以做同样的测试:

OutRanged(1:1801)
[1] TRUE

或者您可以在范围中添加不同的上限或下限:

OutRanged(1:1801, 0, 1801)
[1] FALSE