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 和逻辑比较的示例。
更新
您需要加载 dplyr
或 data.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
>
我有一个很奇怪的问题。
我通过计算生成了一个变量。然后我取了这个数字并创建了一个 +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 和逻辑比较的示例。
更新
您需要加载 dplyr
或 data.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
>