Seite 1 von 1

Variable zurückgeben

Verfasst: Do Mai 18, 2017 7:53 pm
von RCarlos
Hallo,

wie kann man die Berechnung einer Variable zurückgeben lassen, wenn man sie nicht mehr weiß?

z.B:

d<-mean(subset(df$Alter, df$Geschlecht<50))
d
44

nun möchte ich gerne mir wieder die Formel ausgeben lassen, also mean(subset...usw.

Danke

Re: Variable zurückgeben

Verfasst: Do Mai 18, 2017 8:08 pm
von jogo
Hallo RCarlos,

willkommen im Forum!
Das ist ein ähnliches Problem wie wenn Du auf einem Taschenrechner als Ergebnis eine 4 erhalten hast und jetzt herausfinden möchtest, welche Berechnung denn diesen Wert als Ergebnis geliefert hat
- Du siehst, so einfach ist das nicht ...
Als erstes solltest Du Deine Formel als Text speichern, also:

Code: Alles auswählen

dFormel <- "d <- mean(subset(df$Alter, df$Geschlecht<50))"
BTW: Deine Formel ist nicht besonders effizient, besser mean(df$Alter[df$Geschlecht<50])
Dann lies die Hilfetexte der Funktionen parse() und eval()

:!: Warnung: diese Funktionen gehören nicht in die Hände von R-Novizen :!:

Gruß, Jörg

Re: Variable zurückgeben

Verfasst: Do Mai 18, 2017 8:20 pm
von RCarlos
Vielen Dank,

das mit dem Abspeichern der Formel ist hilfreich.
Wo wir dabei sind, ich habe derzeit ca. 20 Formeln im Umlauf. Gibt es ein Speichersystem dafür, ich verliere darüber den Überblick. zum Teil sind die Formeln sehr lang...

Gruß

Re: Variable zurückgeben

Verfasst: Do Mai 18, 2017 8:48 pm
von jogo
Du könntest die Formeln in einem vector of character ablegen ...

Gruß, Jörg

Re: Variable zurückgeben

Verfasst: Do Mai 18, 2017 11:04 pm
von EDi
Ich denke wir sollten einen schritt zurück gehen:

Warum willst du das haben?

(das sollte man sich bei eval(parse()) immer fragen..)

Re: Variable zurückgeben

Verfasst: Fr Mai 19, 2017 10:17 am
von bigben
Der natürliche Speicherort für Formeln sind Funktionen! Du solltest Deine 20 Rechenwege wahrscheinlich in 20 Funktionen ablegen. Dann kannst Du jeder "Formel" einen sinnvollen Namen geben, kannst sie mehrfach immer wieder in sicher identischer Form anwenden und kannst Dir den Code jederzeit neu anzeigen lassen.

LG,
Bernhard

Re: Variable zurückgeben

Verfasst: Fr Mai 19, 2017 4:15 pm
von RCarlos
Hallo Bernhard,
genau das möchte ich ja. Könntest du mir ein Beispiel geben?
Folgende ist doch eine Funktion, oder?:
mwalter<-mean(d$Alter)

Danke

Re: Variable zurückgeben

Verfasst: Fr Mai 19, 2017 4:23 pm
von bigben
Nein, dass ist eine Zuweisung und ein Funktionsaufruf.
mean ist eine Funktion, mean(d$Alter) ist ein Funktionsaufruf. Letzteres ist gleichwertig mit dem Rechenergebnis, nicht mit der Berechnung selbst. Nehmen wir an, es geht um die Berechnung eines Kreisumfangs aus einem Radius. Dann kannst Du folgende Funktion definieren:

Code: Alles auswählen

umf <- function(radius) 2*pi*radius
Wenn Du den Umfang eines Kreises mit Radius 3 errechnen möchtest, dann schreibst Du

Code: Alles auswählen

umf(3)
und wenn Du den Umfang von fünf Kreisen mit den Radiüssen c(1, 2, 3, 4, 5) berechnen möchtest, dann schreibst Du

Code: Alles auswählen

umf(c(1,2,3,4,5))
und wenn Du vergessen hast, wie man das berechnet, dann schreibst Du (ganz ohne Klammern!) Probier es mal aus. Trifft das Dein Problem?

LG,
Bernhard

Re: Variable zurückgeben

Verfasst: Fr Mai 19, 2017 4:26 pm
von jogo
Hallo RCarlos,

Bernhard meinte bestimmt, dass Du Dir Deine eigenen Funktionen definieren kannst:

Code: Alles auswählen

meineSupertolleFunktion <- function(x) {...} 
die Du dann jederzeit wieder verwenden kannst:

Code: Alles auswählen

diesenWert.habe.ich.berechnet <- meineSupertolleFunktion(d$Alter)
Was Du da vorführst, ist der Aufruf einer Funktion. Die Funktion heißt mean und Du übergibst der Funktion beim Aufruf ein Argument (nämlich das Objekt d$Alter). Da Du den Parameter nicht benannt hast, wird er entsprechend der Reihenfolge der Parameter in der Funktionsdefinition zugeordnet, siehe den Hilfetext von mean():

Code: Alles auswählen

?mean
Die Funktion rechnet ein Ergebnisobjekt aus (siehe Abschnitt Value im Hilfetext). Diesen Wert speicherst Du per '<-' in dem Objekt mwalter (falls das Objekt noch nicht vorhanden ist, wird es angelegt; falls es bereits vorhanden ist, wird es überschrieben).

Gruß, Jörg
p.s.: Bitte verwende in Deinen Nachrichten die Formatierung für Codestücke: viewtopic.php?f=20&t=29

Re: Variable zurückgeben

Verfasst: Sa Mai 20, 2017 12:02 am
von EDi
Btw: man kann auch Funktionen schreiben, die Funktionen erstellen. Das kann nützlich sein, wenn man eine Reihe von verwandten Funktionen benötigt.

Oder man kann Funktionen schreiben, die andere Funktionen verändern.