Matrix mit for Schleife

For(), If(), While() und Verwandte. Diskussion von programmiertechnischen Fragen.

Matrix mit for Schleife

Beitragvon Martin1234 » Do 13. Okt 2016, 14:15

Hallo zusammen,
ich versuche aus einem Datensatz (apple - 2 Spalten mit 18 Zeilen) mittels einer for Schleife, pro Schleifendurchlauf, 2 x 2 Matrizen zu erzeugen. Also Beispiel: beim ersten Durchlauf soll die Schleife die ersten beiden Zeilen "herausholen" und sie als 2 x 2 Matrix darstellen, beim zweiten Durchlauf soll die Schleife eine Zeile weiter gehen und die 2+3 Zeile herausholen und sie als Matrix darstellen, beim dritten Durchlauf soll die Schleife wieder eine Zeile weitergehen und die 3+4 Zeile zu einer Matrix zusammenbinden usw.... Von jeder der so erhaltenen Matrizen möchte ich dann im Anschluss eine Varianz Kovarianz Matrix und die Erwartungswerte berechnen. Folgender Code soll das Verlangte umsetzen, jedoch bekomme ich schon bei der Erzeugung der Matrizen Fehlermeldungen. Vielleicht könnte mir da jemand bei helfen....

data(apple)
x<-as.matrix(apple[,1])
y<-as.matrix(apple[,2])
for(i in 1:12){
data1[i]=cbind(x[i:(i+1),],y[i:(i+1),])
}

Wenn ich data1[1],data1[2] usw. aufrufe, sollten dort eigentich die entsprechenden Matrizen erscheinen.

Als Ergänzung habe ich "per Hand" das augeschrieben, was er korrekterweise mit der for Schleife durchführen soll:

data1=cbind(x[1:(1+1),],y[1:(1+1),])
fit1=mlest(data1)
data2=cbind(x[2:(2+1),],y[2:(2+1),])
fit2=mlest(data2)
data3=cbind(x[3:(3+1),],y[3:(3+1),])
fit3=mlest(data3)
data4=cbind(x[4:(4+1),],y[4:(4+1),])
fit4=mlest(data4)

Danke.
Martin1234
 
Beiträge: 3
Registriert: Do 13. Okt 2016, 13:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Matrix mit for Schleife

Beitragvon lilchaos » Fr 14. Okt 2016, 13:24

Hey

erstmal am besten "code" tags verwenden (wenn du einen beitrag schreibst der Button code) damit dein skript richtig formatiert ist, so liest es sich einfacher.

Was ist denn der grund, dass du x und y getrennt speicherst?

Du möchtest in jedem Durchlauf ja die i te Zeile von apple nehmen, dann greife doch direkt auf die zeile zu und hole die zeilen i:i+1 aus apple direkt. ZUgriff erhöltst du ja schon wie es gemacht hast mit:
Code: Alles auswählen
subset <- apple[i:(i+1),]


Du hast 18 Zeilen, warum gehst du denn nur von 1:12 in deiner Schleife?

Du musst dann das ergebnis entweder in einer Liste abspeichern
Code: Alles auswählen
matrizen <- list()
matrizen[[i]] <- subset


oder mit subset deine berechnung durchführen und dieses ergebnis dann speichern. Ich kenne den output von mlest nicht dh kann ich dir da nicht helfen.

Versuch es nochmal und frag nach wenn du weitere hilfe brauchst ;)

Lg
lilchaos
 
Beiträge: 50
Registriert: Mi 22. Jun 2016, 20:11
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Matrix mit for Schleife

Beitragvon Martin1234 » Fr 14. Okt 2016, 15:14

hi,

erstmal danke für deine hilfe.
Was ist denn der grund, dass du x und y getrennt speicherst?


du hast natürlich vollkommen recht. das ist unfug. der datensatz sollte nur als matrix aufgefasst werden. das habe ich verbessert:
Code: Alles auswählen
apple<-as.matrix(apple)


Du hast 18 Zeilen, warum gehst du denn nur von 1:12 in deiner Schleife?

ich wollte die "NA's" zum schluss nicht mit in den matrizen haben, aber klar, richtig wäre natürlich 1:18.

ich hab meinen code, so wie du es vorgeschlagen hast, mal dementsprechend angepasst:
Code: Alles auswählen
apple<-as.matrix(apple)
for (i in 17){
subset<-apple[i:(i+1),]
matrix[[i]]<-subset}


nach meinem verständnis geht die schleife alle 2x2 matrizen durch und speichert die matrizen unter "matrix" ab, welche ich dann durch entprechendes einsetzen von Werten für i, z.b matrix[[I=1]], aufrufen kann. ich bekomme als output aber dann nur die fehlermeldung:

Code: Alles auswählen
object of type 'closure' is not subsettable
,

was für mich jetzt ansich keinen sinn macht, denn ich muss die matrix ja indizieren. :S

danke für deine hilfe :D

vielleicht noch als ergänzung: ich hab es mit deiner zweiten variante, über eine list versucht. hier bekomme ich zwar einen vernünftigen output, jedoch nur "die letzte 2x2 matrix", also nur zeile 17 +18 als gespeicherte werte.

Code: Alles auswählen
data(apple)
apple<-as.matrix(apple)
for (i in 17){
subset<-apple[i:(i+1),]
matrix[i]<-list(subset)
}
Martin1234
 
Beiträge: 3
Registriert: Do 13. Okt 2016, 13:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Matrix mit for Schleife

Beitragvon Martin1234 » Sa 15. Okt 2016, 01:20

mein Problem hat sich gerade erledigt. Danke für den Hinweis mit der Liste. Folgender Code macht das Verlangte:

Code: Alles auswählen
n<-18
matrix<-list()
for(i in 1:n){
  matrix[[i]]<-apple[i:(i+1),]
}


THX!
Martin1234
 
Beiträge: 3
Registriert: Do 13. Okt 2016, 13:53
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Programmierkonzepte

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron