无法对数字向量进行子集

时间:2015-05-10 22:41:30

标签: r

我有一个奇怪的问题,我认为这是一个相对简单的过程 - 我试图将数字向量用于逻辑限定符的子集,如下所示:

> 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;在我的脚本中较早的函数,并在事实似乎修复它之后舍入所有数字六位数。

0 个答案:

没有答案