【发布时间】:2017-01-26 08:25:08
【问题描述】:
希望你能帮我找到解决办法,因为我的结果实在是出乎意料……
我使用函数 expand.grid() 从提供的向量的所有组合创建数据框。
vector1=seq(from=0.8,to=1.6,by=0.2)
vector2=c(seq(from=0.8,to=1.8,by=0.2),2.6)
vector3=seq(from=0.6,to=1.2,by=0.2)
data=expand.grid(F1= vector1,F2= vector2,F3= vector3)
data
F1 F2 F3
1 0.8 0.8 0.6
2 1.0 0.8 0.6
3 1.2 0.8 0.6
4 1.4 0.8 0.6
5 1.6 1.0 0.6
6 0.8 1.0 0.6
7 1.0 1.0 0.6
… … … …
现在我想通过逻辑比较删除一些行。
data_remove=which(data[,1]-data[,2]>0.2)
data_remove
[1] 3 4 5 8 … 110 113 114 115 120
让我们看看第 113 行,因为这是错误的 - 可能还有 data_remove 中的一些其他条目。
data
F1 F2 F3
… … … …
113 1.2 1.0 1.2
… … … …
data[113,1]- data[113,2]
[1] 0.2
(data[113,1]- data[113,2])>0.2
[1] TRUE
这个结果让我很困惑,因为
0.2>0.2
[1] FALSE
和
mode(data[113,1])
[1] “numeric”
mode(data[113,2])
[1] “numeric”
你能解释一下我的错误在哪里吗?
非常感谢!
【问题讨论】:
-
这是这个经典问题stackoverflow.com/q/9508518 的变体。由于数值不准确,差异不完全是
0.2。尝试显示(data[113,1]- data[113,2]) - 0.2。结果不会完全为零。 -
感谢您的评论。但是我该如何处理这个问题呢?在您提到的经典问题中,他们正在谈论
all.equal……好吧,我可以四舍五入data[113,1]-data[113,2]。但是有没有更优雅的方式呢?
标签: r logical-operators