【发布时间】:2018-01-17 23:19:48
【问题描述】:
我有一个行数相同但列不同的稀疏矩阵列表。
这是一个玩具数据集:
library(dplyr)
library(Matrix)
ms <- list(
m1 = data.frame(a = c(1, 10, 100), d = c(2, 20, 200), e = c(3, 30, 300)) %>% as.matrix %>% as("sparseMatrix"),
m2 = data.frame(a = c(4, 40, 400), e = c(5, 50, 500), f = c(6, 60, 600), g = c(7, 70, 700)) %>% as.matrix%>% as("sparseMatrix"),
m3 = data.frame(c = c(8, 80, 800), d = c(9, 90, 900)) %>% as.matrix%>% as("sparseMatrix")
)
我想按列添加ms 中的每个矩阵。这就是我目前的做法:
# get a list of unique columns
final_names <- sapply(ms, colnames) %>% unlist %>% unique
# create an empty sparseMatrix of those dimensions
final_matrix <- matrix(0, nrow = nrow(ms$m1), ncol = length(final_names)) %>%
set_colnames(final_names) %>% as("sparseMatrix")
# add the matrices by column
for(mat in ms) {
current_colnames <- colnames(mat)
final_matrix[, current_colnames] <- mat + final_matrix[, current_colnames]
}
这是我的输出:
final_matrix
3 x 6 sparse Matrix of class "dgCMatrix"
a d e f g c
[1,] 5 11 8 6 7 8
[2,] 50 110 80 60 70 80
[3,] 500 1100 800 600 700 800
这可行,但是当我在真实数据集上尝试时,我遇到了分段错误,因此必须有更好的方法来创建空稀疏矩阵或其他方法。有什么想法吗?
【问题讨论】:
-
也许添加一个
, drop = FALSE到final_matrix[, current_colnames]以防万一您有任何1 列矩阵。
标签: r matrix sparse-matrix