Hallo liebe Leute brauche dringend eure Hilfe
Ich bin ein R "Neuling" und komme bei einem Bsp. leider nicht weiter folgende Aufgabenstellung:
(download.file() and this link: http://www.statistik.at/web_de/static/s ... 035754.csv)
(a) Schreiben Sie eine Funktion für eine Flat-Tax mit 19% Steuersatz sowie 9000 Euro Freibetrag (0%)
(b) Erweitern Sie das System um eine "Negativsteuer": Personen mit Jahreseinkommen unter 9000 Euro |
erhalten eine Steuergutschrift in der Höhe des Steuersatzes (19%), jedoch maximal 190 Euro.
a) habe ich noch geschafft
Flattax <- function(x, r=0.19, f=9000) {
pmax(0, x-f)*r
}
lst$SteuerFlat <- Flattax(lst$Brutto, r=0.19, f=9000)
summary(lst$SteuerFlat)
b) komm ich einfach nicht weiter bin echt verzweifelt
Kann mir vielleicht jemand bitte bitte weiterhelfen
Bitte um Hilfeee -->Funktionen
Bitte um Hilfeee -->Funktionen
Zuletzt geändert von Müli35 am Di Nov 22, 2016 2:05 pm, insgesamt 1-mal geändert.
Re: Bitte um Hilfeee -->Funktionen
Denke du sollst deine Flattax-Funktion erweitern:
Wenn x < 9000, dann:
gutschrift = x * 0.19
wenn gutschrift > 190, dann
gutschrift = 190
gib zurück x + gutschrift
'wenn' ist in R die if() function:
Wenn x < 9000, dann:
gutschrift = x * 0.19
wenn gutschrift > 190, dann
gutschrift = 190
gib zurück x + gutschrift
'wenn' ist in R die if() function:
Code: Alles auswählen
> foo <- function(x) {
+ if(x > 1)
+ 'größer'
+ }
> foo(1)
> foo(2)
[1] "größer"
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Bitte um Hilfeee -->Funktionen
Hallo danke für den tollen Tipp bin weiter etwas weiter gekommen
Flattax <- function (x, r=0.19, f=9000) {
if (x<=9000){
t <- x*0.19
}
if (t>=190) {
190
}
else if (t<=190) {
x*0.19
}
}
lst$Gutschrift <- Flattax2(lst$Brutto)
Das einzige Problem ist diese Warnmeldung
Warning messages:
1: In if (x <= 9000) { :
the condition has length > 1 and only the first element will be used
2: In if (t >= 190) { :
the condition has length > 1 and only the first element will be used
Flattax <- function (x, r=0.19, f=9000) {
if (x<=9000){
t <- x*0.19
}
if (t>=190) {
190
}
else if (t<=190) {
x*0.19
}
}
lst$Gutschrift <- Flattax2(lst$Brutto)
Das einzige Problem ist diese Warnmeldung
Warning messages:
1: In if (x <= 9000) { :
the condition has length > 1 and only the first element will be used
2: In if (t >= 190) { :
the condition has length > 1 and only the first element will be used
Re: Bitte um Hilfeee -->Funktionen
Hallo Müli,
beachte, dass die Konstruktion if (...) <then-Zweig> [ else <esle-Zweig> ] beim if (...) nur einen einzigen logischen Wert verarbeiten kann. Wahscheinlich benötigst Du in Deinem Fall die Funktion ifelse(<log. Vektor>, <TRUE-Wert>, <FALSE-Wert>)
...und bitte formatiere Deine Codezeilen so wie hier beschrieben: viewtopic.php?f=20&t=29
weitere Anmerkungen:
1. Du definierst eine Funktion Flattax() aber rufst die Funktion Flattax2() auf.
2. Wenn x>9000, dann wird t erst gar nicht definiert. IMHO stimmt hier etwas mit der Logik nicht.
3. Die Logik der letzten beiden if ist nicht klar für Werte t=190 (der Wert würde auch auf die zweite Bedingung zutreffen, wird jedoch nicht erreicht, weil schon das erste if greift.)
4. Warum überhaupt das letzte if? Diese Bedingung ist doch immer erfüllt, wenn Du im else-Zweig des vorletzten if bist.
5. IMHO ist schon die Berechnung laut Aufgabenteil a) falsch durchgeführt, denn der Freibetrag bedeutet, dass Einkommen unterhalb von 9000 keine Steuer bezahlen.
Wenn ich die Aufgabe richtig verstanden habe, könnte es so aussehen:
Gruß, Jörg
beachte, dass die Konstruktion if (...) <then-Zweig> [ else <esle-Zweig> ] beim if (...) nur einen einzigen logischen Wert verarbeiten kann. Wahscheinlich benötigst Du in Deinem Fall die Funktion ifelse(<log. Vektor>, <TRUE-Wert>, <FALSE-Wert>)
...und bitte formatiere Deine Codezeilen so wie hier beschrieben: viewtopic.php?f=20&t=29
weitere Anmerkungen:
1. Du definierst eine Funktion Flattax() aber rufst die Funktion Flattax2() auf.
2. Wenn x>9000, dann wird t erst gar nicht definiert. IMHO stimmt hier etwas mit der Logik nicht.
3. Die Logik der letzten beiden if ist nicht klar für Werte t=190 (der Wert würde auch auf die zweite Bedingung zutreffen, wird jedoch nicht erreicht, weil schon das erste if greift.)
4. Warum überhaupt das letzte if? Diese Bedingung ist doch immer erfüllt, wenn Du im else-Zweig des vorletzten if bist.
5. IMHO ist schon die Berechnung laut Aufgabenteil a) falsch durchgeführt, denn der Freibetrag bedeutet, dass Einkommen unterhalb von 9000 keine Steuer bezahlen.
Wenn ich die Aufgabe richtig verstanden habe, könnte es so aussehen:
Code: Alles auswählen
Flattax2 <- function (x, r=0.19, f=9000) {
g <- x * ifelse (x<=9000, r, -r) # Gutschrift (positiv) bzw. Steuer (negativ)
g[g > 190] <- 190 # Kappung der Gutschrift
g # return(g)
}
lst$Gutschrift <- Flattax2(lst$Brutto)
Re: Bitte um Hilfeee -->Funktionen
Hallo Danke für dein Hinweis bin jetzt auf die richtige Lösung gekommen
Re: Bitte um Hilfeee -->Funktionen
Sehr schön, herzlichen Glückwunsch
Dann zeig doch mal, wie Du es gelöst hast. Es wäre schon interessant zu sehen, wie Du es umgesetzt hast.
Gruß, Jörg
p.s.:
Und außerdem solltest Du Dich anständig verhalten und in dem anderen Forum schreiben (dort, wo Dir lilchaos geantwortet hat), dass Du inzwischen eine Lösung für Dein Problem hast.
p.p.s: (Nachtrag)
Jetzt verstehe ich etwas nicht. Du hast Doch geschrieben, dass Du das Problem gelöst hast. Und trotzdem schickst Du Deine Nachricht von gestern (die mit "Das einzige Problem ist diese Warnmeldung ! ...") nochmal genau so heute in das andere Forum ...
Dann zeig doch mal, wie Du es gelöst hast. Es wäre schon interessant zu sehen, wie Du es umgesetzt hast.
Gruß, Jörg
p.s.:
Und außerdem solltest Du Dich anständig verhalten und in dem anderen Forum schreiben (dort, wo Dir lilchaos geantwortet hat), dass Du inzwischen eine Lösung für Dein Problem hast.
p.p.s: (Nachtrag)
Jetzt verstehe ich etwas nicht. Du hast Doch geschrieben, dass Du das Problem gelöst hast. Und trotzdem schickst Du Deine Nachricht von gestern (die mit "Das einzige Problem ist diese Warnmeldung ! ...") nochmal genau so heute in das andere Forum ...