如何降低 R 中的机器精度 .Machine$double.eps?
How to decrease machine precision .Machine$double.eps in R?
当使用名为 did
的 R 包时,出现此错误:
Error in solve.default(preV) : system is computationally singular:
reciprocal condition number = 4.09946e-19
solve
函数有一个名为 tol
的参数,我可以通过它设置公差,从而避免问题。但是这个包没有给出这个选项来从它的顶级函数中指定这个tol
,所以没有办法为solve
设置tol
。
我正在考虑替代方案。由于 solve()
默认使用 .Machine$double.eps
作为 tol
,如果我能降低这个默认值就好了。怎么样?
这是你不能减少的东西,因为它是一种 C 标准。但是,您可以手动将 tol = 1e-20
设置为函数输入,例如,以覆盖默认容差。但是,这纯粹是一种数字解决方法。您需要考虑是否有可能在您的问题级别解决排名不足的问题。例如,由于数据变量之间的缩放比例不佳,可能会出现排名不足,这是一个简单的例子:.
I not sure as to what to do here then? As I said I'm using a function called mp.spatt
where the solve
function is used. So I can't really (or at least I don't know how?) add the tol = blabla
argument in the solve
function?
您可以编写该函数的补丁版本并重建包供您自己使用。这正是开源软件和软件包如此出色的原因。
转到https://cran.r-project.org/package=did,下载Linux的源文件.tar.gz
,Mac的.tgz
或[=49的.zip
=].解压,打开/R
目录/文件夹中的"did.R"文件。函数solve
在这个文件中只使用了一次,所以你很容易找到它:
W <- n*t(preatt)%*%solve(preV)%*%preatt
为简单起见,您可以添加 tol = 0
。或者,你们用 MASS::ginv
替换 solve
。实际上,包作者一直在脚本的其他地方使用 MASS::ginv
。也有可能是他忘记更换这个solve
(我正在查看2018/07/11的最新版本1.1.0)
修复后,再次生成.tar.gz
、.tgz
或.zip
文件。打开你的R,使用install.packages
安装这个特定的文件,愉快地使用它。
当使用名为 did
的 R 包时,出现此错误:
Error in solve.default(preV) : system is computationally singular:
reciprocal condition number = 4.09946e-19
solve
函数有一个名为 tol
的参数,我可以通过它设置公差,从而避免问题。但是这个包没有给出这个选项来从它的顶级函数中指定这个tol
,所以没有办法为solve
设置tol
。
我正在考虑替代方案。由于 solve()
默认使用 .Machine$double.eps
作为 tol
,如果我能降低这个默认值就好了。怎么样?
这是你不能减少的东西,因为它是一种 C 标准。但是,您可以手动将 tol = 1e-20
设置为函数输入,例如,以覆盖默认容差。但是,这纯粹是一种数字解决方法。您需要考虑是否有可能在您的问题级别解决排名不足的问题。例如,由于数据变量之间的缩放比例不佳,可能会出现排名不足,这是一个简单的例子:
I not sure as to what to do here then? As I said I'm using a function called
mp.spatt
where thesolve
function is used. So I can't really (or at least I don't know how?) add thetol = blabla
argument in thesolve
function?
您可以编写该函数的补丁版本并重建包供您自己使用。这正是开源软件和软件包如此出色的原因。
转到https://cran.r-project.org/package=did,下载Linux的源文件.tar.gz
,Mac的.tgz
或[=49的.zip
=].解压,打开/R
目录/文件夹中的"did.R"文件。函数solve
在这个文件中只使用了一次,所以你很容易找到它:
W <- n*t(preatt)%*%solve(preV)%*%preatt
为简单起见,您可以添加 tol = 0
。或者,你们用 MASS::ginv
替换 solve
。实际上,包作者一直在脚本的其他地方使用 MASS::ginv
。也有可能是他忘记更换这个solve
(我正在查看2018/07/11的最新版本1.1.0)
修复后,再次生成.tar.gz
、.tgz
或.zip
文件。打开你的R,使用install.packages
安装这个特定的文件,愉快地使用它。