Erstellung einer Funktion

Fragen, die sich auf kein spezielles Verfahren beziehen.

Erstellung einer Funktion

Beitragvon River89 » Sa 28. Feb 2015, 12:30

Hey Leute
Ich habe Folgendes Problem, wir hatten vergangenes Semester R behandelt. Jetzt muss ich eine Projektarbeit schreiben mit dem Schwerpunkt Programmierung.
Was absolutes Neuland für mich ist und mich fast an den Rand des Wahnsinns treibt :oops: :roll:
Ich schildere euch mal mein Problem vielleicht könnt ihr mir weiterhelfen

Ich habe eine Datei eingelesen, die mehrere Personendaten beinhaltet. Unter anderem das Geschlecht(Variable:Geschlechtmix) und der tägliche Kalorienverbrauch(KcalV). Nun würde ich gerne eine Funktion erstellen, die erkennt ob die Person Männlich '"m" oder weiblich "w" ist und mir demnach nach einer Kalorienformel den Kalorienumsatz ausrechnet...

Umsatz für Männer =66,47+13,7*Variable für Gewicht (Gewichtmix)+5*Variable für Größe(Groessemix)-6,8*Variable für Alter(Altermix)
Umsatz für Frauen =655,1+9,6*Variable für Gewicht (Gewichtmix)+1,8*Variable für Größe(Groessemix)-4,7*Variable für Alter(Altermix)

Ich habe schon so vieles versucht, aber nichts hilft mir weiter...
Oder gibt es ein generelles Problem bei dieser Aufgabenstellung?

Ich hoffe ihr könnt mir weiterhelfen.

Vielen Dank
River89
Grünschnabel
Grünschnabel
 
Beiträge: 5
Registriert: Sa 28. Feb 2015, 12:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Erstellung einer Funktion

Beitragvon strukturmarionette » Sa 28. Feb 2015, 12:56

Hi,

solang wie nicht das Dateiende erreicht ist

wenn geschlecht männlich
berechne: Umsatz für Männer =66,47+13,7*Variable für Gewicht (Gewichtmix)+5*Variable für Größe(Groessemix)-6,8*Variable für Alter(Altermix)

wenn geschlecht =weiblich
berechne: Umsatz für Frauen =655,1+9,6*Variable für Gewicht (Gewichtmix)+1,8*Variable für Größe(Groessemix)-4,7*Variable für Alter(Altermix)

Ende der Do-While Schleife.

Das bauchste nur in den jeweiligen Code einer Progarmmiersprache umsetzen, ggfs vorher Variablendeklarationen u.ä. vornehmen.

Gruß
S.
strukturmarionette
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 4356
Registriert: Fr 17. Jun 2011, 22:15
Danke gegeben: 32
Danke bekommen: 587 mal in 584 Posts

Re: Erstellung einer Funktion

Beitragvon River89 » Sa 28. Feb 2015, 13:18

Danke für die rasche Antwort!

Aber ich verstehe es noch nicht so ganz...Bin vom Wording her noch nicht so ganz durchgestiegen. Das heißt ich muss keine Funktion erstellen?

Wie würde denn beispielsweise ein Befehl dieser Art aussehen?

Vllt hilft eine kurze Vorlage weiter

Tut mir Leid für meine Unwissenheit :mrgreen:


LG River
River89
Grünschnabel
Grünschnabel
 
Beiträge: 5
Registriert: Sa 28. Feb 2015, 12:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Erstellung einer Funktion

Beitragvon River89 » Sa 28. Feb 2015, 16:51

Das eigentliche Problem liegt darin, dass ich die Formel nicht auf Vektoren anwenden kann...

Wie kann ich dieses Problem lösen?
Ich glaube damit wäre mir schon ein gutes Stück weitergeholfen...

LG
River89
Grünschnabel
Grünschnabel
 
Beiträge: 5
Registriert: Sa 28. Feb 2015, 12:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Erstellung einer Funktion

Beitragvon bele » So 1. Mär 2015, 00:07

Ist schon spät, daher jetzt nur eine Kurzantwort. Die aber gleich mit drei Optionen
- schau Dir mal die Funktion ifelse() an. Damit kannst Du recht elegant in einem Funktionsaufruf eine neue Spalte in Deinem Dataframe basteln, die je nach Geschlecht verschieden errechnet wird
- wenn es Dir gelungen ist, eine einfache Funktion zu schreiben, die Du vektorisieren willst, dann hilft im Allgemeinen die Funktion Vectorize()
- wenn Du eine Funktion geschrieben hast, die Du auf alle Zeilen eines Dataframes anwenden willst, hilft apply()

Im konkreten Fall würde ich das mit ifelse() machen. Wenn Du es selbst nicht hinbekommst, dann poste mal etwas Code, der Beispieldaten erzeugt, damit wir was zum Spielen haben.

Die vorgeschlagene Schleife geht natürlich, ist aber in R nicht sehr idiomatisch.

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5928
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 16
Danke bekommen: 1403 mal in 1389 Posts

Re: Erstellung einer Funktion

Beitragvon bele » So 1. Mär 2015, 13:47

Hallo,

heute über Tag etwas mehr Zeit. Habe das mal mit selbst ausgedachten Beispieldaten und einer Vereinfachung Deiner Formel geschrieben. Einmal mit ifelse() und einmal mit Vectorize(). Die Lösungen mit Schleifen und mit apply überlasse ich Dir, wenn Du das im letzten Semester verpasste nacharbeitest, wird das eine interessante (aber nicht ganz banale) Übung sein.

Code: Alles auswählen
gewicht <- c(55, 65, 61, 75, 69, 81)
groesse <- c(165, 169, 171, 180, 188, 175)
alter   <- c(31, 25, 34, 21, 35, 33)
geschlecht <- c(1, 1, 1, 2, 2, 2)

# zunaechst Daten immer in einen Dataframe:

daten <- data.frame(gewicht = gewicht,
                    groesse = groesse,
                    alter = alter,
                    geschlecht = geschlecht)

# so, das sind jetzt unsere Beispieldaten:
print(daten)

# und jetzt ergänzen wir eine Spalte mit dem Umsatz
daten$umsatz.ifelse <- ifelse(daten$geschlecht==1,
                       13*daten$gewicht+.005*daten$groesse+.005*daten$alter,
                       655+9.6*daten$gewicht+.005*daten$groesse+.005*daten$alter)

#und das ist das Ergebnis
print(daten)


# alternativ mit Vectorize()
# zunachst erzeugen wir eine einfache Funktion f, die nicht vektorisiert ist
f <- function(geschlecht, gewicht, groesse, alter){
    if(geschlecht==1) return( 13*gewicht+.005*groesse+.005*alter )
    return( 655+9.6*gewicht+.005*groesse+.005*alter )
}
# now, the magic happens...
f <- Vectorize(f)

# und so einfach ist die Anwendung:
daten$umsatz.Vectorize <- f(daten$geschlecht, daten$gewicht, daten$groesse, daten$alter)

# und es kommt das Gleiche heraus:
print(daten)


LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5928
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 16
Danke bekommen: 1403 mal in 1389 Posts

Re: Erstellung einer Funktion

Beitragvon River89 » So 1. Mär 2015, 17:43

Hey

Vielen Dank für die tolle Hilfe. Heute bin ich den ganzen Tag unterwegs. Ich werde es morgen gleich mal ausprobieren, bis dahin bin ich echt gespannt ob einer deiner Lösungswege fruchten wird.

Großes Lob für die viele Arbeit die du dir gemacht hast !Thumps Up!

Viele liebe Grüße

River:)
River89
Grünschnabel
Grünschnabel
 
Beiträge: 5
Registriert: Sa 28. Feb 2015, 12:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Erstellung einer Funktion

Beitragvon River89 » Mo 2. Mär 2015, 21:24

Ein großes Lob an dich bele für die Mühe!

Beide Lösungswege haben gefruchtet:)

Das hat mir sehr weiter geholfen

Ich schaue mal wie ich die Tage noch so weiterkomme, ansonsten würde ich mich nochmal kurz melden :mrgreen:

DANKE
LG River
River89
Grünschnabel
Grünschnabel
 
Beiträge: 5
Registriert: Sa 28. Feb 2015, 12:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Allgemeine Fragen

Wer ist online?

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