如何使用 R 正确比较科学计数法中的数字? [复制]
Posted
技术标签:
【中文标题】如何使用 R 正确比较科学计数法中的数字? [复制]【英文标题】:How to properly compare numbers in scientific notation using R? [duplicate] 【发布时间】:2022-01-22 11:20:06 【问题描述】:我正在阅读 following tutorial 以测试两个人群的比例。运行后
prop.test(x=c(342,290), n=c(400,400))
我收到了 9.558674e-06 的 p 值,教程说它大于 0.05 的 alpha 水平。我认为这是一个错字,只是将 p 值与其十进制值 0.000009558674 进行比较,但收到“False”。我什至关闭了科学记数法使用
options(scipen=999)
当从 prop.test 返回的对象中打印出 p 值时,在将 p 值与 0.000009558674 进行比较时,我仍然收到“False”,它认为 p 值小于。为什么会这样?
【问题讨论】:
我对您的问题的理解是,您将 9.559e-06(四舍五入)与 9.558674e-06 进行比较,这可能小于或大于取决于未四舍五入的值? 浮点相等(尤其是高精度数字)应该小心测试;更好的比较是查看绝对差异是否低于阈值。例如,abs(9.559e-06 - 0.000009558674) < 1e-9
为真,表示这些数字非常相似。对于浮点相等,请参阅***.com/q/9508518、***.com/q/588004 和 en.wikipedia.org/wiki/IEEE_754。
抱歉,原帖有错别字。我收到的 p 值为 9.558674e-06。
见 r2evans 的回答。浮点数的相等性永远无法真正正确地测试。
这是一个常见问题。请参阅 R 常见问题解答:cran.r-project.org/doc/FAQ/…
【参考方案1】:
您可能需要考虑使用all.equal()
函数。可以使用tolerance
参数设置值之间的容差。
isTRUE(all.equal(2, 2.00000001))
## [1] TRUE
isTRUE(all.equal(2, 2.00000001, tolerance = 0.0000000001))
## [1] FALSE
【讨论】:
以上是关于如何使用 R 正确比较科学计数法中的数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R 中的 read.csv(或其他读取函数)中“关闭”科学记数法?