如何在矩阵市场格式中打印稀疏矩阵,但使用0索引

时间:2016-11-08 00:15:59

标签: r matrix sparse-matrix

我想使用R的Matrix库的writeMM以矩阵市场格式将稀疏矩阵写入外部文件。 见:https://stat.ethz.ch/R-manual/R-patched/library/Matrix/html/externalFormats.html

矩阵

4 0
2 4


library(Matrix)
writeMM(matrix, "./outfile.tsv")

outfile.tsv:

#rowindex #columnindex #value

1 1 4
2 1 2
2 2 4

但是,我希望输出文件中的打印索引有效地被索引,而R中的默认值是1索引的。即我想从打印的每一行和每列索引中减去1。

如何在尽可能多地使用预先存在的功能的同时做到这一点?

2 个答案:

答案 0 :(得分:0)

以下是使用reshape2的解决方案:

m <- matrix(c(4,2,3,4), ncol = 2);

# Reshape
library(reshape2);
m.long <- melt(m);

# 0-based indices
m.long[, 1:2] <- m.long[, 1:2] - 1;

# Optionally sort
m.long <- m.long[order(m.long[, 1],  m.long[, 2]) ,]
print(m.long);
  Var1 Var2 value
1    0    0     4
3    0    1     3
2    1    0     2
4    1    1     4

答案 1 :(得分:0)

summary对象的Matrix函数返回包含ijx列的数据框。每个非零条目都有一行。只需从ij列中减去1,你就可以了 - 再加上你没有浪费大量内存。

更新:

这不适用于Matrix包中的所有稀疏矩阵,但如果执行summary(as(my_mat, "dgTMatrix")),它应该有效。