r 中的 seq() 函数出错?

Error in the seq() function in r?

我有一个很奇怪的问题。
我通过计算生成了一个变量。然后我取了这个数字并创建了一个 +0.02,-0.02 的范围(例如,Number= 7.74,UpperRange=7.76,LowerRange=7.72)。

之后我写了一个for循环,它应该检查数字是否在范围内。答案必须最小为 1,因为 7,74 在 7.72-7.76 之间。
但答案为 FALSE。

但是如果我检查 7.73 或 7.75 是否在范围内,答案是 TRUE。
它只会给我特定数字的 TRUE 吗?为什么?

代码:

number= 7.74
upperRange = number + 0.02
lowerRange = number - 0.02
#
# This does not work!
# The length here is 1, but in real more than 1. For example purposes.
for(i in 1:length(number){
if(number[i] %in% seq(upperRange,lowerRange,0.01){
    print("Number is in the range")
}
else{
    print("Try again")
}
#
#
# But this works. When I change the number from 7.74 to 7.73, 7.75 or 7.76
number2 = 7.73
for(i in 1:length(number){
    if(number2[i] %in% seq(upperRange,lowerRange,0.01){
    print("Number2 is in the range")
}
else{
    print("Try again")
}

您的 seq 参数顺序错误。使用以下任一项

seq(upperRange,lowerRange,-0.01)

seq(lowerRange,upperRange,0.01)

尽管对于您要完成的任务,还有更好的方法来检查一个数字是否介于两个数字之间。查看此答案 ,了解 between、findInterval 和逻辑比较的示例。

更新

您需要加载 dplyrdata.table 包或显式引用它们以使用 between 函数

dplyr::between(number, lowerRange, upperRange)
data.table::between(number, lowerRange, upperRange)

虽然如果你还没有使用这些包中的任何一个,我会坚持使用 base

中包含的内容
findInterval(number, lowerRange, upperRange)==1L
number>=lowerRange & number<=upperRange

常见问题 7.31

这是使用浮点数时的常见问题。

更多数据;查看值 --

    > number= 7.74
    > upperRange = number + 0.02
    > lowerRange = number - 0.02
    > print(number, digits = 20)
    [1] 7.7400000000000002
    > x <- seq(lowerRange, upperRange, by = 0.01)
    > print(x, digits = 20)
    [1] 7.7200000000000006 7.7300000000000004 7.7400000000000002 7.7500000000000009 7.7599999999999998
    >