2016-06-23 33 views
1

我正試圖在R中創建一個數組,其中矩陣單元格是從現有值集合中填充的。例如,如何通過循環從R中現有的一組值中自動填充矩陣?

我有3組,每組有6個值。

valuecos = c(1,2,3,4,5,6) 
directcos = c(10,20,30,40,50,60) 
pricecos = c(100, 200, 300, 400,500,600) 

我要的是下面的數組

 [,1] [,2] [,3] 
[1,] 1 10 100 
[2,] 2 20 200 
[3,] 3 30 300 

, , 2 

    [,1] [,2] [,3] 
[1,] 4 40 400 
[2,] 5 50 500 
[3,] 6 60 600 

現在,我手動這樣做

lag1<-matrix(c(valuecos[1],valuecos[2],valuecos[3],directcos[1],directcos[2],directcos[3],pricecos[1],pricecos[2],pricecos[3]), nrow=3, ncol=3) 
lag2<-matrix(c(valuecos[4],valuecos[5],valuecos[6],directcos[4],directcos[5],directcos[6],pricecos[4],pricecos[5],pricecos[6]), nrow=3, ncol=3) 
matrices <- list(lag1, lag2) 
matlist <- array(data = do.call(cbind, matrices), dim = c(dim(matrices[[1]]), length(matrices))); 

但是陣列可能會更大,因此可能的設置和值數每套,所以我想通過循環自動化整個陣列創建,以避免錯誤。我不是循環中的大專家,所以我只能得到很多仍然缺少的代碼。我假設我需要一個外部循環來獲得數組中矩陣的數量,然後是一個內部循環,我可以將單個矩陣單元填充到數值集之外?

lags = t 
nrow = a 
nrow = b 

matlist = array(NA,c(a,b,t)) 
for (i in 1:t){ 
    matlist[,,i] = ???? 

lag = matrix(NA, nrow = a, ncol=b) 
for (r in 1:a){ 
    for (c in 1:b){ 
    lag[,,] <- (valuecos[r]... ???) 
    } 
} 
} 

如果有人能夠幫助我進一步,那將是非常好的。謝謝!

回答

1

你堅持循環嗎?如果目標是將這些數據轉換成一個數組,你可以直接這樣做(但無可否認它總讓我試了幾次,以獲得正確的順序...)

valuecos = c(1,2,3,4,5,6) 
directcos = c(10,20,30,40,50,60) 
pricecos = c(100, 200, 300, 400,500,600) 

把一切融合在一起:

M <- cbind(valuecos,directcos,pricecos) 

將其放入數組中:使用命名爲 dimnames在嘗試重新排列/排列時較少傷害您的大腦。

a1 <- array(M,dim=c(3,2,3),dimnames=list(D1=1:3,D2=c("a","b"), 
             D3=c("v","d","p"))) 

現在置換:

a2 <- aperm(a1,c("D1","D3","D2")) 
## , , D2 = a 
## 
## D3 
## D1 v d p 
## 1 1 10 100 
## 2 2 20 200 
## 3 3 30 300 
## 
## , , D2 = b 
## 
## D3 
## D1 v d p 
## 1 4 40 400 
## 2 5 50 500 
## 3 6 60 600 
+0

我不知道這給了我一個數組,在那裏我可以比稍後再從中提取值,如DD [1,1,1] = 1? – User23

+0

對此有幫助嗎? –