2012-05-31 85 views
-4

我試圖從一個向量創建這樣的矩陣來創建矢量的不同的值的矩陣:高效方式中的R

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 

,並且每個的長度和矢量vec的值被改變的時間。我如何編寫一個函數來創建這個矩陣?

+0

我迷路了 - 什麼是3個值之間的初始向量(VEC)和成果矩陣(A)所需的關係?他們似乎在從第2列到第5列的下降滯後期,但第1列正在做什麼? – thelatemail

+0

此問題已在CrossValidated和遷移[此處](http://stackoverflow.com/q/10851976/210673)轉發更多詳細信息。 – Aaron

回答

3

我有點失去了這個問題,但此行

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

...產生你想要的結果的最後一部分:

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

然後您可以將其綁定到矢量的第一個數字。

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

給...

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

謝謝。這就是我一直在尋找的方式。 –

1

我認爲這可能做到這一點:

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