我有一个向量,我想确保它的所有值都在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
。
答案 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