问题:
我有一个长度相同的向量列表。我想将这些向量转换为较低的三角矩阵。但是,每个向量的每个元素在这些矩阵上都将处于特定位置。
请注意,我的原始矩阵非常复杂,并且强烈基于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))
个元素。然后,我需要为这些向量分配一个数字3
。 x=c(1:10)
指1
,x1
指2
,依此类推。
然后,我需要将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
,4
,7
和9
的所有其他条目称为M
的每个向量的位置。例如, 4 指X
, 7 指x4
,而 9 指x7
以此类推。因此,x9
的位置是x4
上4
的整个[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
请问有什么方法吗?
答案 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
}