将具有不同行数的矩阵列表中的值输入到具有相等行数的矩阵列表中

问题描述 投票:0回答:1

我陷入了问题的最后一步(我猜)。

您可以看到我可以获得每个矩阵与值匹配的行。

我虽然用输入矩阵中的值填充具有相同维度的空矩阵列表会很简单,但我不能更进一步。

下面提供了 MWE

mymatrix.empty <- matrix(0, ncol=1, nrow=10)
rownames(mymatrix.empty) <- c(1:10)
mymatrix.1 <- matrix(c(1,2,3),ncol=1,nrow=3)
rownames(mymatrix.1) <- c(1:3)
mymatrix.2 <- matrix(c(4,5,6,7),ncol=1,nrow=4)
rownames(mymatrix.2) <- c(4:7)
mymatrix.3 <- matrix(c(7,8,9,10,11),ncol=1,nrow=5)
rownames(mymatrix.3) <- c(7:11)
mymatrix.list <- list(mymatrix.1,mymatrix.2,mymatrix.3)
mymatrix.list

#desired output
mymatrix.1.out <- matrix(c(1,2,3,0,0),ncol=1,nrow=5)
mymatrix.2.out <- matrix(c(4,5,6,7,0),ncol=1,nrow=5)
mymatrix.3.out <- matrix(c(7,8,9,10,11),ncol=1,nrow=5)
myoutput.list <- list(mymatrix.1.out,mymatrix.2.out,mymatrix.3.out)
myoutput.list

#getting the index of the rows with the values to be input in the list of matrix with equal dimension
myrows <- list()
for (i in c(1:3)){
    myrows[[i]] <- rownames(mymatrix.empty)[rownames(mymatrix.empty) %in% rownames(mymatrix.list[[i]])]
}

下面报告了我不成功的尝试

mymatrix.filled <- list()
for (i in c(1:3)){
mymatrix.filled[[i]] <- mymatrix.empty[myrows,] <-mymatrix.list[[i]][myrows]
}

任何帮助将不胜感激。谢谢!

史蒂夫

r list matrix fill
1个回答
0
投票

我们假设问题是输入一个单列矩阵列表并输出它填充到最长的长度。 昏暗的名字应该被删除。

我们计算长度

lens
和模板
template
。 然后我们更新 对每个输入列表元素使用
replace
的模板。

lens <- lengths(mymatrix.list)
template <- matrix(0, max(lens), 1)

Replace <- function(m, len) replace(template, seq_along(m), m)
out <- Map(Replace, mymatrix.list, lens)

identical(out, myoutput.list)
## [1] TRUE

注意

mymatrix.list <- list(
  matrix(c(1, 2, 3), 3, dimnames = list(c("1", "2", "3"), NULL)),
  matrix(seq(4, 7, by = 1), 4, dimnames = list(c("4", "5", "6", "7"), NULL)),
  matrix(seq(7, 11, by = 1), 5, dimnames = list(c("7", "8", "9", "10", "11"), NULL))
)

myoutput.list <- list(
  matrix(c(1, 2, 3, 0, 0), 5),
  matrix(c(4, 5, 6, 7, 0), 5),
  matrix(seq(7, 11, by = 1), 5)
)
© www.soinside.com 2019 - 2024. All rights reserved.