在向列表添加矩阵时按名称和维度索引列表元素

时间:2017-08-11 12:32:43

标签: r matrix

我在for循环中工作,每次迭代都会生成一个矩阵,并希望将结果矩阵存储在列表中。例如,循环的结构使得我不能简单地通过循环索引索引结果列表 ResultsList[[i]] <- ResultsMx无法使用此实例。

相反,我需要通过匹配名称将ResultsMx添加到ResultsList但不确定如何索引正确的名称和deminsions而不会收到错误:number of items to replace is not a multiple of replacement length

例如,我想添加此矩阵

ResultsMx <- structure(c(0.280409, 0.248557, 0.193688, 0.120225, 0.060881, 
                0.03218, 0.029315, 0.019525, 7e-06, 3e-06, 0.306503, 0.240209, 
                0.224629, 0.133996, 0.043117, 0.016981, 0.012545, 0.003268, 7.8e-05, 
                5.8e-05, 0.219001, 0.202018, 0.197539, 0.188427, 0.093204, 0.047265, 
                0.033493, 0.007712, 0.000352, 0.00015, 0.126588, 0.15627, 0.161544, 
                0.194544, 0.171473, 0.103416, 0.070513, 0.014678, 0.001778, 0.000774, 
                0.054797, 0.100531, 0.1249, 0.171576, 0.21895, 0.168987, 0.120546, 
                0.045224, 0.006602, 0.003019, 0.012318, 0.045509, 0.073426, 0.125358, 
                0.225135, 0.219425, 0.169645, 0.117345, 0.030413, 0.011488, 0.000385, 
                0.006894, 0.023663, 0.060295, 0.151452, 0.242802, 0.222163, 0.206509, 
                0.098567, 0.04849, 0, 1.2e-05, 0.000611, 0.005577, 0.035691, 
                0.151408, 0.239021, 0.301288, 0.230251, 0.211833, 0, 0, 0, 2e-06, 
                9.8e-05, 0.017526, 0.098463, 0.245786, 0.417003, 0.724185, 0, 
                0, 0, 0, 0, 9e-06, 0.004297, 0.038665, 0.21495, 0), .Dim = c(10L, 
                                                                             10L))

到这个空白矩阵列表:

SeasonResults <- list(BHSSummSymScReClass = matrix(0, nrow = 10, ncol = 10),
                      MTGSummSymScReClass = matrix(0, nrow = 10, ncol = 10),
                      BHSWintSymScReClass = matrix(0, nrow = 10, ncol = 10),
                      MTGWintSymScReClass = matrix(0, nrow = 10, ncol = 10)) 

将list元素与此名称对象匹配:

SeasonNames <- c("BHSSummSymScReClass", "MTGSummSymScReClass")

此处使用以下代码将第一个列表项与第一个SeasonName项匹配:

SeasonResults[names(SeasonResults) == SeasonNames[1]] <- ResultsMx

生成上述警告,仅添加ResultsMx中的1,1元素。

如何指定正确的尺寸,以便根据与ResultsMx匹配的名称将整个SeasonResults添加到SeasonNames列表?

我看过很多相关的SO帖子,但没有一个涉及我需要根据名称匹配和维度进行索引。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我们可以使用for循环和which函数。 which寻找 适用于names(SeasonResults)SeasonNames中找到的匹配项。然后我们迭代这些索引,用ResultsMx替换内容。

for(i in which(names(SeasonResults) %in% SeasonNames)){
    SeasonResults[[i]] <- ResultsMx
}

答案 1 :(得分:1)

只需使用当前名称作为元素索引

assert branchPorts['master'] == 15565
assert branchPorts['HotFix'] == 15569
例如

SeasonResults[[theName]] = ResultsMx;