如何将向量元素存储到矩阵的特定位置

时间:2018-11-16 16:30:43

标签: r matrix

问题:

我有一个长度相同的向量列表。我想将这些向量转换为较低的三角矩阵。但是,每个向量的每个元素在这些矩阵上都将处于特定位置。

请注意,我的原始矩阵非常复杂,并且强烈基于for循环。因此,我需要使用for循环来解决此问题。

示例:

假设我有X个向量,即{p>

10

每个向量包含X <- list(x1=c(1:3), x2=(2:4), x3=c(4:2), x4=c(5:7), x5=c(12,34,54), x6=c(3:5), x7=c(2:4), x8=c(3,4,5), x9=c(44,56,7), x10=c(34,5,4)) 个元素。然后,我需要为这些向量分配一个数字3x=c(1:10)1x12,依此类推。

然后,我需要将x2转换为较低的三角矩阵,即

x

x <- c(1:10) M <- matrix(0,5,5) M[lower.tri(M, diag=FALSE)] <- x M [,1] [,2] [,3] [,4] [,5] [1,] 0 0 0 0 0 [2,] 1 0 0 0 0 [3,] 2 5 0 0 0 [4,] 3 6 8 0 0 [5,] *4* *7* 9 10 0 479的所有其他条目称为M的每个向量的位置。例如, 4 X 7 x4,而 9 x7以此类推。因此,x9的位置是x44的整个[5,1]

现在:

  • 我需要将每个向量的元素存储在M中其向量的位置。换句话说,每个向量的每个元素都基于该元素的向量数进行存储。例如,M属于向量54,因此其位置为5

例如,向量5的元素为x4。然后,我需要将它们存储在三个不同的下三角矩阵中,每个元素都位于其位置,即

5, 6, and 7

因此,向量> X_new[[1]] [,1] [,2] [,3] [,4] [,5] [1,] 0.0 0 0 0 0 [2,] 0 0 0 0 0 [3,] 0.0 0 0 0 0 [4,] 0.0 0 0 0 0 [5,] 5 0 0 0 0 X_new[[2]] [,1] [,2] [,3] [,4] [,5] [1,] 0.00 0 0 0 0 [2,] 0 0 0 0 0 [3,] 0.00 0 0 0 0 [4,] 0.00 0 0 0 0 [5,] 6 0 0 0 0 > X_new[[3]] [,1] [,2] [,3] [,4] [,5] [1,] 0.00 0 0 0 0 [2,] 0 0 0 0 0 [3,] 0.00 0 0 0 0 [4,] 0.00 0 0 0 0 [5,] 7 0 0 0 0 的元素在下三角矩阵x4处的位置4处相同。所有其他向量都相同。

为此,我必须使用for循环(因为我的原始函数使用了for循环)。

M行数。然后,k = 5, 4, 3, 2每行全部。

i= 4, 3, 2, 1

请问有什么方法吗?

1 个答案:

答案 0 :(得分:1)

我们可以使用lapply

lapply(X[4:6], function(x) {
         M <- matrix(0, 5, 5)
         M[lower.tri(M, diag = TRUE)] <- x
     M
    })

如果我们需要一个for循环,

for(i in 4:6) {
    tmp <- matrix(0, 5, 5)
    tmp[lower.tri(tmp, diag = TRUE)] <- x
    X[[i]] <- tmp
}