例如,我有两个矩阵,我想知道它们在每个元素中是否相同.
mymatrix<-Matrix(rnorm(20),ncol=5)
mysvd<-svd(mymatrix)
newmatrix<-mysvd$u %*% diag(mysvd$d) %*% t(mysvd$v)
Run Code Online (Sandbox Code Playgroud)
我使用以下方法来比较它们:
identical(Matrix(newmatrix), mymatrix)
all.equal(Matrix(newmatrix), mymatrix)
Run Code Online (Sandbox Code Playgroud)
为什么第一个不返回TRUE?无论我使用矩阵包中的Matrix还是基础包中的矩阵
identical由于差异非常小,它们并不完全相同(每个):
> max(abs(Matrix(newmatrix) - mymatrix))
[1] 1.110223e-15
Run Code Online (Sandbox Code Playgroud)
但这些差异小于默认tolerance内部all.equal:
> .Machine$double.eps ^ 0.5
[1] 1.490116e-08
Run Code Online (Sandbox Code Playgroud)
所以identical会返回FALSE和all.equal返回TRUE.
请尝试以下方法:
> dput(Matrix(newmatrix))
new("dgeMatrix"
, x = c(-0.705193264426589, 0.68023073271425, 0.0726318059033283, -0.111055227906436,
-0.113940777963113, 0.726463241417717, -0.343435098646076, 0.885225942372688,
-0.549848405897803, -0.0227469387867766, -0.927524398860002,
0.58047674424687, 0.521144348439824, 0.279602090928527, -1.31686400403363,
0.906874499735628, -0.276997805548975, 0.632960950203858, 0.453881309098762,
-0.00528540521655077)
, Dim = 4:5
, Dimnames = list(NULL, NULL)
, factors = list()
)
> dput(newmatrix)
structure(c(-0.705193264426589, 0.68023073271425, 0.0726318059033283,
-0.111055227906436, -0.113940777963113, 0.726463241417717, -0.343435098646076,
0.885225942372688, -0.549848405897803, -0.0227469387867766, -0.927524398860002,
0.58047674424687, 0.521144348439824, 0.279602090928527, -1.31686400403363,
0.906874499735628, -0.276997805548975, 0.632960950203858, 0.453881309098762,
-0.00528540521655077), .Dim = 4:5)
Run Code Online (Sandbox Code Playgroud)
显然,这些数据结构并不相同.