Bitte um Hilfeee -->Funktionen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Müli35

Bitte um Hilfeee -->Funktionen

Beitrag von Müli35 »

Hallo liebe Leute brauche dringend eure Hilfe :geek:

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 :D
Zuletzt geändert von Müli35 am Di Nov 22, 2016 2:05 pm, insgesamt 1-mal geändert.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Bitte um Hilfeee -->Funktionen

Beitrag von EDi »

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:

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
Bild.
Müli35

Re: Bitte um Hilfeee -->Funktionen

Beitrag von Müli35 »

Hallo danke für den tollen Tipp bin weiter etwas weiter gekommen :D

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 :o
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
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Bitte um Hilfeee -->Funktionen

Beitrag von jogo »

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:

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)
Gruß, Jörg
Müli35

Re: Bitte um Hilfeee -->Funktionen

Beitrag von Müli35 »

Hallo Danke für dein Hinweis bin jetzt auf die richtige Lösung gekommen :D
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Bitte um Hilfeee -->Funktionen

Beitrag von jogo »

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 ...
Antworten