【问题标题】:R - svd() function - infinite or missing values in 'x'R - svd() 函数 - 'x' 中的无限或缺失值
【发布时间】:2014-02-20 19:13:40
【问题描述】:

我经常收到此错误。我确信矩阵没有任何非数字条目。我也试过插补矩阵,没用。

有人知道错误可能是什么吗?

fileUrl <- "https://dl.dropboxusercontent.com/u/76668273/kdd.csv";
download.file(fileUrl,destfile="./kdd.csv",method="curl");
kddtrain <- read.csv("kdd.csv");
kddnumeric <- kddtrain[,sapply(kddtrain,is.numeric)];
kddmatrix <- as.matrix(kddnumeric);
svd1 <- svd(scale(kddmatrix));

【问题讨论】:

  • 将来,我们会感谢一个小的可复制示例(而不是需要下载的东西)。

标签: r infinite svd


【解决方案1】:

您有由全零组成的列。在全为零的列上使用scale 会返回由NaN 组成的列。要解决此问题,请删除全为零的列(svd 不会显示有关它们的任何新内容),或在使用 scale 后将 NaN 列替换为零。

可重现的例子:

mat <- matrix(c(1,2,3,0,0,0,2,4,6,5,12,13),nrow = 3)
     # [,1] [,2] [,3] [,4]
# [1,]    1    0    2    5
# [2,]    2    0    4   12
# [3,]    3    0    6   13
scale(mat)
     # [,1] [,2] [,3]       [,4]
# [1,]   -1  NaN   -1 -1.1470787
# [2,]    0  NaN    0  0.4588315
# [3,]    1  NaN    1  0.6882472
# attr(,"scaled:center")
# [1]  2  0  4 10
# attr(,"scaled:scale")
# [1] 1.000000 0.000000 2.000000 4.358899
svd(mat) #fine
svd(scale(mat)) # not fine

【讨论】:

  • 非常感谢,完美的答案。一个简单的行 kddmatrix
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2011-12-04
  • 2015-01-27
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多