2016-06-23 2 views
1

Ich versuche die Erstellung eines Arrays in R zu automatisieren, wo die Matrixzellen aus vorhandenen Wertesätzen gefüllt werden. Zum BeispielWie füllt man Matrizen in einem Array automatisch aus einer bestehenden Menge von Werten in R über eine Schleife?

Ich habe 3 Sätze mit je 6 Werten.

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

Was ich will, ist die folgende Array

 [,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 

Gerade jetzt, ich diese

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))); 

manuell zu tun, aber das Array bekommen kann größer, so kann die Anzahl der Sätze und Werte pro Satz, also möchte ich die gesamte Array-Erstellung über eine Schleife automatisieren, um Fehler zu vermeiden. Ich bin kein großer Experte in Schleifen, also kam ich nur so weit nach unten, dass noch viel Code fehlt. Ich nehme an, ich brauche eine äußere Schleife für die Anzahl der Matrizen t in meinem Array und dann eine innere Schleife, wo ich die einzelnen Matrixzellen aus der Wertemenge füllen kann?

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]... ???) 
    } 
} 
} 

Es wäre toll, wenn mir jemand weiterhelfen könnte. Vielen Dank!

Antwort

1

Bestehen Sie auf einer Schleife? Wenn das Ziel ist, diese Daten in ein Array zu transformieren ist, können Sie es direkt tun (obwohl zugegebenermaßen dauert es mir immer ein paar versucht, die Reihenfolge richtig zu machen ...)

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

Setzen Sie alles zusammen:

M <- cbind(valuecos,directcos,pricecos) 

Setzen Sie es in ein Array: Verwenden Sie mit dem Namen Dimnamen, um Ihr Gehirn weniger zu verletzen, wenn Sie versuchen, neu anzuordnen/permutieren.

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

Jetzt permutieren:

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

Ich bin mir nicht sicher, dass dies mir ein Array gibt, wo kann ich als es später noch einmal Werte von extrahieren, wie in dd [1,1,1] = 1? – User23

+0

hat das geholfen? –

Verwandte Themen