r中的seq()函数出错?

时间:2016-12-18 15:43:04

标签: r sequence seq

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

之后我写了一个for循环,它应该检查Number是否在范围之间。答案必须至少为1,因为7,74在7.72-7.76之间。
但答案是假的。

但如果我检查7.73或7.75是否在范围内,答案是正确的。
只有特定的数字才会给我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")
}

2 个答案:

答案 0 :(得分:2)

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

seq(upperRange,lowerRange,-0.01)

seq(lowerRange,upperRange,0.01)

虽然对于您要完成的任务,有更好的方法可以检查数字是否介于两个数字之间。请查看此答案https://stackoverflow.com/a/41201517/3242130,了解findInterval和逻辑比较之间的示例。

<强>更新

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

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

虽然如果您还没有使用这些套餐中的任何一种,我会坚持使用基本的内容

findInterval(number, lowerRange, upperRange)==1L
number>=lowerRange & number<=upperRange

答案 1 :(得分:0)

常见问题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
    >