Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 简单序列的逻辑返回不正确_R - Fatal编程技术网

R 简单序列的逻辑返回不正确

R 简单序列的逻辑返回不正确,r,R,下面是一些基本代码及其输出。对于包含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 &

下面是一些基本代码及其输出。对于包含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位)。

您可以通过编写自己的比较函数来复制all.equal的功能:

is.nearenough=function(x,y,tol=.Machine$double.eps^0.5){
  abs(x-y)<tol
}
is.nearenough=函数(x,y,tol=.Machine$double.eps^0.5){

abs(x-y)您可以通过编写自己的比较函数来复制all.equal所做的工作:

is.nearenough=function(x,y,tol=.Machine$double.eps^0.5){
  abs(x-y)<tol
}
is.nearenough=函数(x,y,tol=.Machine$double.eps^0.5){

abs(x-y)这不是一个错误,这是使用浮点算术表示数字的结果。你应该使用
all.equal
而不是
==
来测试是否相等。这个问题已经被问了好几次了,所以-我将尝试找到它们并发布链接。这是我的猜测。但我假设对于o其他值,否?另外,
all.equal
在这里不起作用,因为我想找到等于1.2的值(我在
which()
中进行了此测试)。类似的问题:,它也在R-FAQ中。您可能想阅读整个文档。这应该会节省您一些时间(可能会让您感到尴尬)从长远来看,您可以使用
Vectorize
创建
all.equal
的矢量化版本,然后使用
创建(all.equal.vec(…)==TRUE)
。这不是一个错误,这是使用浮点算术表示数字的结果。你应该使用
all.equal
而不是
=
来测试相等性。这个问题已经被问了好几次了,所以-我将尝试找到它们并发布链接。这是我的猜测。但我假设同样的问题也会发生se表示其他值,否?另外,
all.equal
在这里不起作用,因为我想找到等于1.2的值(我在
which()
中进行了此测试)。类似的问题:,也在R-FAQ中。您可能想阅读整个文档。这应该会节省您一些时间(可能会让您感到尴尬)从长远来看,您可以使用
Vectorize
创建
all.equal
的矢量化版本,然后使用
创建(all.equal.vec(…)==TRUE)