Проблема:
У меня есть список векторов одинаковой длины. Я хотел бы преобразовать эти векторы в нижние треугольные матрицы. Однако каждый элемент каждого вектора займет определенную позицию в этих матрицах.
Обратите внимание, что моя исходная матрица очень сложна и основана на цикле for
. Следовательно, мне нужно решить эту проблему, чтобы использовать for
цикл.
Пример:
Предположим, что у меня есть список X
с 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
называются позициями каждого вектора X
. Например, 4 относится к x4
, 7 относится к x7
, а 9 относится к 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
в нижней треугольной матрице M
. То же самое для всех других векторов.
Для этого я должен использовать for loop (как моя оригинальная функция использует для loop).
k = 5, 4, 3, 2
количество строк. Затем i= 4, 3, 2, 1
весь каждый ряд.
for(k in 5:2){
for(i in 1:(k-1)){
X_new[k,i] <- X[[i]]
}
}
Есть идеи, как это сделать, пожалуйста?