我想使用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。
如何在尽可能多地使用预先存在的功能的同时做到这一点?
答案 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
函数返回包含i
,j
和x
列的数据框。每个非零条目都有一行。只需从i
和j
列中减去1,你就可以了 - 再加上你没有浪费大量内存。
更新:
这不适用于Matrix
包中的所有稀疏矩阵,但如果执行summary(as(my_mat, "dgTMatrix"))
,它应该有效。