【发布时间】:2016-12-18 15:43:03
【问题描述】:
我有一个非常奇怪的问题。
我通过计算生成了一个变量。然后我取了这个数字并创建了一个 +0.02、-0.02 范围(例如,Number= 7.74、UpperRange=7.76、LowerRange=7.72)。
之后我写了一个 for 循环,它应该检查 Number 是否在范围之间。答案必须最小为 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()时混淆lowerRange和upperRange,正如manotheshark 所指出的,我发现6 个(!)右括号和大括号丢失了。 -
这种不稳定的行为可能是由于使用带有双精度数字的
%in%时的舍入错误。不幸的是,我无法在我的机器上重现观察到的效果。请问,您能否尝试明确地对所有涉及的数字进行四舍五入,即round(number[i], 2) %in% round(seq(lowerRange, upperRange, 0.01), 2)?