我有一个奇怪的问题,我认为这是一个相对简单的过程 - 我试图将数字向量用于逻辑限定符的子集,如下所示:
> test<-rep(seq(1,10,length.out=20),5)
> head(test)
[1] 1.000000 1.473684 1.947368 2.421053 2.894737 3.368421
> test[test==10]
[1] 10 10 10 10 10
> test[test==1]
[1] 1 1 1 1 1
超级容易,是吗?这是我的载体:
> str(days)
num [1:889] 0.542 0.545 0.549 0.552 0.556 ...
> summary(days)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.5417 1.3130 2.0830 2.0830 2.8540 3.6250
我试图提取与整数匹配的值:
> days[days==3]
numeric(0)
这不起作用,也没有做任何其他事情:
> days[days==0.542]
numeric(0)
> days[days==0.556]
numeric(0)
我想我做了一件非常简单的错事,但我很难过:(
编辑:
所以看起来它确实是一个浮点数问题,正如评论者所描述的那样。 &#39; all.equal&#39;在某些情况下工作,但在我的所有代码中实现它是令人厌倦的。这是我应用的修复程序:
days<-round(days,digits=6)
dt.matrix<-apply(dt.matrix,c(1,2),function(x) {round(x,digits=6)} )
我能够使用&#39; ==&#39;通常在那之后,没有问题。我认为这是有效的,因为引入了小错误,因为其他的&#39; apply&#39;在我的脚本中较早的函数,并在事实似乎修复它之后舍入所有数字六位数。