.Internal(La_rs()) returns 在某些安装上有负值,但在其他安装上没有
.Internal(La_rs()) returns negative values on some installations but not others
这是上一个问题的延续:
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 builds/library 版本有关吗?一些我不知道的设置?错误?
编辑:这是一个更新的例子。它似乎工作不一致,即使在这个特定的安装上,有时我确实得到零:
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)
我认为差异可以忽略不计。等于或小于 10^(-12) 的矩阵元素的平均差实际上为零。
Rfast中的hd.eigen函数只适用于n < p的情况,即行数小于列数的情况。在 hd.eigen 函数的帮助页面中是对建议该算法的论文的引用。我认为该算法不适用于任何其他情况。也许这就是你获得 NA 的原因。
Rfast2 包含一个名为 "pca" 的函数,它适用于任何一种情况,np.也试试那个。在那里,从 R.
调用 "svd" 有效地执行了 SVD
这是上一个问题的延续: 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 builds/library 版本有关吗?一些我不知道的设置?错误?
编辑:这是一个更新的例子。它似乎工作不一致,即使在这个特定的安装上,有时我确实得到零:
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)
我认为差异可以忽略不计。等于或小于 10^(-12) 的矩阵元素的平均差实际上为零。
Rfast中的hd.eigen函数只适用于n < p的情况,即行数小于列数的情况。在 hd.eigen 函数的帮助页面中是对建议该算法的论文的引用。我认为该算法不适用于任何其他情况。也许这就是你获得 NA 的原因。
Rfast2 包含一个名为 "pca" 的函数,它适用于任何一种情况,np.也试试那个。在那里,从 R.
调用 "svd" 有效地执行了 SVD