【发布时间】:2015-12-23 17:02:19
【问题描述】:
除了我之前的问题R: How to match/join 2 matrices of different dimensions (nrow/ncol)?,我还需要一个循环,因为我有一个包含 1000 多个矩阵的列表。我决定使用代码(来自答案)
full_matrix[rownames(full_matrix) %in% rownames(small_matrix),
colnames(full_matrix) %in% colnames(small_matrix)] <- small_matrix
在我的情况下,对于单个矩阵匹配来说效果很好。但是,我在将此代码实现到list 的matrices“small_matrix”的循环中时遇到问题。这是我的代码:
full_matrix <- list()
for(i in 1:length(small_matrix))
{
full_matrix[i][rownames(full_matrix[i]) %in% rownames(small_matrix[i]),
colnames(full_matrix[i]) %in% colnames(small_matrix[i])] <- small_matrix[i]
}
我收到错误:incorrect number of subscripts on matrix,这可能是由于我对循环的基本知识中的索引错误。我很感激任何帮助。谢谢
根据@Jim M. 的回答进行新编辑: 您的答案适用于此示例,但 small_matrix(ces) 也应该像以前的question 一样在循环中创建。在这里你可以找到代码示例:
library(abind)
a = c("A", "B", "C", "D", "E", "F")
full_matrix = array(dim=c(6,6,2))
dimnames(full_matrix) <- list(levels(as.factor(a)), levels(as.factor(a)),
c("mat1","mat2"))
正如@Jim M. 建议的那样。这里是新代码:
##### new part for small matrix
df_import <- data.frame(OC = c("A", "A", "B", "B", "C", "C", "D", "D"),
TC = c("Z", "Z", "Y", "Y", "X", "X", "W", "W"),
Value = c(1,2,3,4,5,6,7,8),
Year = c(2010,2011))
Import_Year <- split(df_import, df_import$Year)
library(reshape2)
small_matrix <- list()
for(i in 1:length(unique(Import_Year)))
{
small_matrix[[length(small_matrix)+1]] <- dcast(OC ~ TC, data =Import_Year[[i]], value.var = "Value")
}
small_matrix
##### end new part
还有@Jim 的 for 循环。男:
for(i in seq_along(small_matrix_list)){
afill(full_matrix[, , i], local= TRUE ) <- small_matrix[[i]]
}
但是,我收到以下错误消息:
Error in `afill<-.default`(`*tmp*`, local = TRUE, value = list(OC = 1:4, :
'x' must have names on dimensions corresponding to those in 'value'
有什么想法吗?谢谢
【问题讨论】:
-
每个较小矩阵的完整矩阵是否相同,是否需要列表作为输出?