这是上一个问题的延续:Rfast hd.eigen() returns NAs but base eigen() does not
我在.Internal(La_rs((x))
上在不同的计算机上返回不同的结果时遇到问题。
我怀疑它可能与数字格式有关,因为在同一台计算机上,如果我另存为CSV并重新打开,则不会再出现底片了:
在清除Linux上安装:
> load("input_to_La_rs.Rdata")
> r <- .Internal(La_rs(as.matrix(x), only.values = FALSE))
> sum(r$values < 0)
[1] 1
> write.csv(x, "test_for_internal.csv", row.names = FALSE)
> x <- read.csv("test_for_internal.csv")
> r <- .Internal(La_rs(as.matrix(x), only.values = FALSE))
> sum(r$values < 0)
[1] 0
但是,在Windows安装(以及基于CentOS的HPC设置)上,我可以直接打开rdata文件,而不会得到负值:
> load("input_to_La_rs.Rdata")
> r <- .Internal(La_rs(x, only.values=TRUE))
> sum(r$values < 0)
[1] 0
这与不同的R版本/库版本有关吗?我不知道的某些设置?一个错误?
编辑:这是一个更新的示例。即使在此特定安装上,它似乎也不一致,有时我确实得到零:
set.seed(123)
bigm <- matrix(rnorm(2000*2000,mean=0,sd = 3), 2000, 2000)
m <- Rfast::colmeans(bigm)
y <- t(bigm) - m
xx <- crossprod(y)
x <- unname(as.matrix(xx))
b <- .Internal(La_rs(x, TRUE))
sum(b$values < 0)
# [1] 1
还有另一次更新:事实证明,第一个差异随着Rfast
的colmeans
产生,与基本colMeans产生的结果略有不同。
set.seed(123)
bigm <- matrix(rnorm(2000*2000,mean=0,sd = 3), 2000, 2000)
m <- colMeans(bigm)
m <- colmeans(bigm)
y <- t(bigm) - m
xx <- crossprod(y)
x <- unname(as.matrix(xx))
b <- .Internal(La_rs(x, TRUE))
sum(b$values < 0)
# [1] 1
m <- colMeans(bigm)
y <- t(bigm) - m
xx <- crossprod(y)
x <- unname(as.matrix(xx))
b <- .Internal(La_rs(x, TRUE))
sum(b$values < 0)
[是上一个问题的延续:Rfast hd.eigen()返回NA,但是基本eigen()并不存在.Internal(La_rs((x))在不同的地方返回不同结果的问题……
我认为差异可以忽略不计。等于或小于10 ^(-12)的矩阵元素的平均差实际上为零。