Schleife, Fehlermeldung

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Studentpsych
Beiträge: 13
Registriert: Di Apr 06, 2021 4:07 pm

Schleife, Fehlermeldung

Beitrag von Studentpsych »

Hallo liebe Community,
ich hätte eine Frage, und zwar bin ich dabei eine Schleife in R zu schreiben, um Variablensprünge in einen Datensatz zu korrigieren. Ich habe mich auch erst neulich in das Thema "Schleifen in R" eingelesen, deshalb weiß ich auch nicht, ob das jetzt eine "dumme" Frage ist oder nicht.
Ich habe folgenden Beispielcode geschrieben:

Code: Alles auswählen

rt<- c(164, 165, 170, 165, 184, 185, 187)
for (i in 1:length(rt)) {
  if ((rt[i+1]-rt[i])<1){ 
    diff= rt[i+1]-rt[i]
    rt[(i+1):length(rt)] <- rt[(i+1):length(rt)]+diff}
  
}
Wenn ich diese Schleife ausführe, scheint R genau das zu machen, was ich möchte. Allerdings bekomme ich folgende Fehlermeldung: Fehler in if ((rt[i +

Code: Alles auswählen

Fehler in if ((rt[(i + 1)] - rt[i]) < 1) { : 
  Fehlender Wert, wo TRUE/FALSE nötig ist
Kann mir jemand sagen, warum ich diese Fehlermeldung bekomme? Bis jetzt sieht es so aus als könnte ich sie einfach ignorieren... Allerdings bin ich aufgrund der Fehlermeldung etwas verunsichert, da ich dieses vereinfachte Prinzip auf einen komplexeren Datensatz anwenden möchte (dort bekomme ich dementsprechend die gleiche Fehlermeldung und hierbei ist es nicht mehr so leicht nachvollziehbar, ob der Code das gemacht hat, was er soll).
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Schleife, Fehlermeldung

Beitrag von bigben »

Hallo!

Wie soll denn das rt[i+1] beim letzten Schleifendurchlauf funktionieren?

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Studentpsych
Beiträge: 13
Registriert: Di Apr 06, 2021 4:07 pm

Re: Schleife, Fehlermeldung

Beitrag von Studentpsych »

Hallo Bernhard!

Also das rt[i+1] steht hier dafür, dass etwas mit jedem Wert nach dem Wert i der Variable "rt" gemacht werden soll. In diesem fall, wird eine gewisse Differenz (diff) addiert. Diese Differenz wurde vorher ausfindig gemacht rt[i+1]-rt der folgende Wert minus dem vorherigen. Und wenn der folgende Wert minus dem vorherigen kleiner 1 ergibt, dann soll ab dieser stelle i diese Differenz addiert werden (auf jeden darauffolgenden Wert). In den original Daten gib es sowas wie "Hüpfer", diese sollen korrigiert werden (ich hänge mal einen Screenshot an).
Screenshot_1.png
LG, Robin
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Schleife, Fehlermeldung

Beitrag von jogo »

Hallo Robin,

willkommen im Forum!
So kommt der Fehler zustande

Code: Alles auswählen

rt <- c(164, 165, 170, 165, 184, 185, 187)
i <- length(rt)
rt[i+1]
Wenn Du das so machen willst, solltest Du die Schleife eine Runde weniger drehen lassen:

Code: Alles auswählen

for (i in 1:(length(rt)-1)) {
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Schleife, Fehlermeldung

Beitrag von bigben »

Hallo,

da bin ich gestern Abend am Handy wohl zu einsilbig gewesen. Jörg hat es ja jetzt erklärt.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Studentpsych
Beiträge: 13
Registriert: Di Apr 06, 2021 4:07 pm

Re: Schleife, Fehlermeldung

Beitrag von Studentpsych »

Hallo Bernhard, Hallo Jörg
Ah, also ist der Fehler wegen dem einen NA - Wert am Ende entstanden.
Vielen Dank ihr seid super!

LG, Robin
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Schleife, Fehlermeldung

Beitrag von Athomas »

R ist ja Weltmeister im Verbergen von Schleifen-Funktionalitäten, und Vektorbefehle sind erheblich schneller als ihre Schleifen-Pendants - dashalb hier noch eine Alternative.
Komplett verstanden habe ich Dein Problem nicht, aber vielleicht hilft es ja:

Code: Alles auswählen

v <- c(164, 165, 170, 165, 184, 185, 187)
cumsum(c(v[1], pmax(diff(v), 0)))
Antworten