Mod eficient pentru a crea matrice de valoare diferită a unui vector în R

Încerc să creez o matrice ca aceasta de la un vector:

    vec =c(1, 2, 3)

    > A
          [,1] [,2] [,3] [,4] [,5]
    [1,]    1    1    0    0    0
    [2,]    1    2    1    0    0
    [3,]    1    3    2    1    0

și de fiecare dată când lungimea și valoarea vectorului vec se schimbă. Cum pot scrie o funcție pentru a crea această matrice?

4
Sunt pierdut - care este relația dorită dintre cele 3 valori din vectorul inițial (vec) și matricea rezultantă (A)? Se pare că se află într-un decalaj descendent din coloanele 2-5, dar ce face coloana 1?
adăugat autor thelatemail, sursa
Această întrebare a fost reprodusă cu mai multe detalii la CrossValidated și a migrat aici .
adăugat autor Aaron, sursa

2 răspunsuri

Sunt puțin pierdut în legătură cu întrebarea, dar această linie

vec <- 1:3
embed(c(rep(0,length(vec)),vec),length(vec)+1)

... produce ultima parte a rezultatului dorit:

     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    2    1    0    0
[3,]    3    2    1    0

Pe care le puteți lega la primul număr al vectorului.

cbind(vec[1],embed(c(rep(0,length(vec)),vec),length(vec)+1))

pentru a da ...

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    0    0    0
[2,]    1    2    1    0    0
[3,]    1    3    2    1    0
3
adăugat
Mulțumiri. Așa m-am căutat.
adăugat autor Bensor Beny, sursa

Cred că acest lucru ar putea face acest lucru:

vec =c(1, 2, 3)

my.matrix <- matrix(0, nrow=length(vec), ncol=(max(vec)+2))
my.matrix


for(i in 1:length(vec)) {

     my.matrix[i,1] <- 1
     z <- seq(vec[i], 1, -1)
     my.matrix[i,2:(vec[i]+1)] <- z
}

my.matrix
1
adăugat