我注意到在两个不同的R版本中,小数的最后一位有差异。
我在使用以下代码时注意到了这一点
predict(loess(x ~ y, z))
我的x、y和z变量的内容在两个版本中都是相同的。所以这不可能是原因。
这些就是我所看到的不同类型。请注意,最后一个数字总是有区别的:
< 52603 1.94277696545303e-05
> 52603 1.94277696545304e-05
< 52608 2.03530763978453e-05
> 52608 2.03530763978454e-05
我已经检查了以下内容:
- 黄土函数R页的示例代码(https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/loess)。两个版本之间没有差异
- 。两个R版本的机器输出相同
这可能是什么原因造成的?或者有人对下一步该检查什么以找出这种差异的原因有建议吗?
以下是我的两个R版本的sessionInfo((结果
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS Linux 8 (Core)
Matrix products: default
BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] optparse_1.6.4
loaded via a namespace (and not attached):
[1] compiler_3.6.1 tools_3.6.1 getopt_1.20.3
> sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: openSUSE 12.2 (Mantis) (x86_64)
Matrix products: default
BLAS: /nexus/software/R/Rapp/lib64/R/lib/libRblas.so
LAPACK: /nexus/software/R/Rapp/lib64/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] optparse_1.6.0
loaded via a namespace (and not attached):
[1] compiler_3.4.3 getopt_1.20.2
您需要逐步重新检查什么是浮动表示。在R FAQ中的条目7.31(这本身可能是FAQ中最著名的条目(下有一篇(非常著名的(文章,您可以从这里阅读。
从本质上讲,您的数字与您所在计算机的精度是相同的。我们正在使用R所称的numeric
或double
,它(目前(是一个64位变量,最多允许16位精度。
当看到";"相等";,ε变化,之后我们说";是的,他们是平等的;通常是它的平方根,因为计算会引起舍入误差。
快速演示:
> value <- 1.23456789
> all.equal(value, value + 1e-5)
[1] "Mean relative difference: 8.1e-06"
> all.equal(value, value + 1e-7)
[1] "Mean relative difference: 8.1e-08"
> all.equal(value, value + 1e-9)
[1] TRUE
>
因此,使用,R可能在优化循环结束时使用,会清楚地将您的上述值标记为相等。这可能看起来有点违背直觉,也有点令人沮丧,但这就是电脑生活。读一遍,再读一遍,";7.31〃;以及参考文献。