【问题标题】:Set all NaN elements in sparse matrix to zero将稀疏矩阵中的所有 NaN 元素设置为零
【发布时间】:2015-03-19 02:59:59
【问题描述】:

R 中的 Matlab 语句 X(isnan(X))=0 的等价物是什么?注意X 在 R 中属于 matrix.csr 类型。(来自 pkg:SparseM。)

【问题讨论】:

  • 您能否从具有 NA 值的 matrix.csr-object 发布 dput 输出?我无法获得X[1,3] <-NAis.na(X[1,3]) <- TRUE 来创造这样的价值。 (或者只是发布代码来创建这样的矩阵。)
  • 我假设 OP 确实意味着 NaN 而不是 NA,因为如果你想用 0 填充一个稀疏矩阵,其中缺少值,它将不再是稀疏的。
  • 我的意思是NaN 而不是Na
  • 好吧,Na 在 R 中不是什么东西。也许你不是说NA

标签: r nan sparse-matrix


【解决方案1】:

R中的函数其实就是is.na。

然后你可以像在 Matlab 中一样使用逻辑索引(只注意使用方括号):

X[is.na(X)]=0

【讨论】:

  • NaNNA 不同。根据输入,OP 可能也想知道 is.nan
  • is.na 对于数字 NaN 仍然返回 TRUE。
【解决方案2】:

您确定要使用 matrix.csr 类吗?它来自 SparseM 包,据我所知,至少从包文档中可以看出,没有 is.na<-is.na[ 方法。 Matrix-package 确实记录了 is.na-methods:

> library(Matrix);M <- Matrix(1:6, nrow=4, ncol=3,
+        dimnames = list(c("a", "b", "c", "d"), c("A", "B", "C")))
> stopifnot(all(!is.na(M)))
> M[2:3,2] <- NA
> M[is.na(M)] <- 0
> M
4 x 3 Matrix of class "dgeMatrix"
  A B C
a 1 5 3
b 2 0 4
c 3 0 5
d 4 2 6

Matrix 包现在是推荐的包之一。我的印象是 SparseM 并没有被广泛使用。

【讨论】:

  • 我正在使用 pkg:R.matlab 加载.mat 文件,该文件提供 SparseM 包类型的矩阵。我可以把它转换成别的东西(比如 Matrix 包)吗?
  • 如果您进行谷歌搜索,您会发现对 pkg:Matrix 帮助页面的引用表明它具有用于 from = "matrix.csr", to = "dgRMatrix" 和 .... from = "matrix.csr", to = "dgCMatrix" 和 . .. ` from = "matrix.csr", to = "Matrix"``
  • 感谢推荐Matrix包!我最初使用SparseMR.matlab,并且有一个错误不允许使用R.matlab 将我的矩阵集加载到pkgMatrix 中。该错误已由作者修复。
  • 所以我们应该给 Martin Maechler 打勾?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2012-01-09
相关资源
最近更新 更多