如何使用 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(或其他读取函数)中“关闭”科学记数法?

Java中如何使用科学计数法

如何把excel中已显示为科学计数法的数值取消科学计数法

Python正则表达式 | 如何只提取中文英文字母数字(含科学计数法)

write.csv 时科学记数法最后一位省略为零

如何让EXCEL中的数据用科学计数法显示