2017-11-10 1 views
0

Es gibt also ein Hobbyprojekt, an dem ich gerade arbeite, um meine R-Fähigkeiten zu verbessern. Was ich mit meinem vorherigen Code erstellt habe, sind verschiedene Teilmengen von Daten "returnseries.1, returnseries.2, returnseries.3, ..." (von 1 bis 119), die jeweils in einer 252x6-Matrix gespeichert sind.Speichern der Kovarianzmatrix in einer for-Schleife - R

Jetzt baue ich eine for-Schleife, um die Kovarianzmatrix für jede Teilmenge zu berechnen.

Mein Code geht wie folgt vor:

for(k in 1:119){ 
covmat[k] = matrix(c(cov(returnseries[k])),nrow=6, ncol=6) 
} 

Aus irgendeinem Grund habe ich den Fehler, dass: "My column index must be at most 7 not 8."

Und ich nicht, warum. Ich habe mehrere andere Codeversionen ausprobiert, aber nichts gibt mir eine Antwort. Dachte, dass es mit der Benennung zu tun hatte, aber return series.[k] liefert mir einen Fehler, der returnseries. nicht

definiert

würde sich freuen, wenn jemand ein schnelles

+1

möchten Sie 119 6x6 Matrizen speichern? du wirst sie in einem 6x6x119 Array speichern wollen – MichaelChirico

+0

Hallo da Michael. Genau ich möchte 119 6x6 Matrizen speichern –

Antwort

0

Sie ein Array verwenden können, bieten könnte. Ein 3D-Array in diesem Fall.

Generieren Sie einige Daten.

> xy <- list(one = matrix(rnorm(9), ncol = 3), 
+   two = matrix(rnorm(9), ncol = 3), 
+   three = matrix(rnorm(9), ncol = 3)) 
> xy 
$one 
      [,1]  [,2]  [,3] 
[1,] 0.1341714 -1.27229790 0.22431441 
[2,] 1.0853899 0.02335881 -0.05600098 
[3,] -1.5645181 0.83745858 -1.47670091 

$two 
      [,1]  [,2]  [,3] 
[1,] 1.4891642 -0.3766222 -0.86981432 
[2,] 0.3424295 -1.7882177 1.79601480 
[3,] -1.1583058 -0.1604330 0.02690498 

$three 
      [,1]  [,2]  [,3] 
[1,] -0.1511346 -0.3672432 -0.3008405 
[2,] -1.9881830 -0.8545396 -0.7108430 
[3,] 0.1637134 -0.7958267 1.1923535 

leeres Array erstellen

> N <- 3 
> ar <- array(rep(NA, 3*3*N), dim = c(3, 3, N)) 
> ar 
, , 1 

    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

, , 2 

    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

, , 3 

    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

Fill in Werte.

> for (i in 1:N) { 
+ ar[,, i] <- xy[[i]] 
+ } 
> 
> ar 
, , 1 

      [,1]  [,2]  [,3] 
[1,] 0.1341714 -1.27229790 0.22431441 
[2,] 1.0853899 0.02335881 -0.05600098 
[3,] -1.5645181 0.83745858 -1.47670091 

, , 2 

      [,1]  [,2]  [,3] 
[1,] 1.4891642 -0.3766222 -0.86981432 
[2,] 0.3424295 -1.7882177 1.79601480 
[3,] -1.1583058 -0.1604330 0.02690498 

, , 3 

      [,1]  [,2]  [,3] 
[1,] -0.1511346 -0.3672432 -0.3008405 
[2,] -1.9881830 -0.8545396 -0.7108430 
[3,] 0.1637134 -0.7958267 1.1923535 

Sie können jetzt alle möglichen wunderbaren Dinge tun. Führen Sie beispielsweise Zeilensummen aus.

> apply(ar, MARGIN = 3, FUN = rowSums) 
      [,1]  [,2]  [,3] 
[1,] -0.9138121 0.2427277 -0.8192183 
[2,] 1.0527477 0.3502266 -3.5535656 
[3,] -2.2037604 -1.2918338 0.5602402 

Hier ist der Beweis für die erste Matrix. Vergleichen Sie es mit der ersten Spalte:

> rowSums(xy[[1]]) 
[1] -0.9138121 1.0527477 -2.2037604 
+0

Hallo Roman danke für deine schnelle Antwort aber leider funktioniert das nicht –

+0

@ArthurVott das ist nur ein Beispiel. Sie müssen Ihren Code ein wenig anpassen. Kannst du auch genauer sagen, was nicht funktioniert? –

Verwandte Themen