这是一些基本代码及其输出。我真的不能说除了包含1.2的序列的逻辑测试之外的结果是不正确的。它适用于许多其他价值观。
# Incorrect
> seq(0.5, 1.5, by=0.05) == 1.2
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# Correct
> seq(0.5, 1.5, by=0.05) == 1.15
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# Correct
> seq(0.5, 1.5, by=0.05) == 1.25
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
# Correct
> seq(0.5, 1.5, by=0.05) == 1.3
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
我尝试使用以下方法测试所有值,但不会重现该错误:
> sapply(seq(0.5, 1.5, by=0.05), function(x){sum(seq(0.5, 1.5, by=0.05) == x)})
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
我正在使用R版本2.13.2(2011-09-30),平台:x86_64-pc-linux-gnu(64位)。
答案 0 :(得分:4)
您可以通过编写自己的比较函数来复制all.equal所做的事情:
is.nearenough=function(x,y,tol=.Machine$double.eps^0.5){
abs(x-y)<tol
}
然后你可以做哪个(is.nearenough(s,1.2))其中s是你的序列。您可能需要调整应用程序的容差。