2017-05-26 2 views
0

Ich erstelle einige Funktionen für mich selbst und ich weiß nicht, wie ich vorgehen soll, um ein Objekt (zB einen Wert) von einer Funktion zu einer anderen zu verwenden, während die Konsole läuft noch. Als Beispiel:Wie Objekte der vorherigen Funktion übergeben werden können R

first <- function(x){ 
return(x) 
} 

second <- function(y){ 
z <- x + y 
return(z) 
} 

Also, wenn Sie diese Funktionen mit einem ‚+‘ nennen ...

first(x = 5) + 
    second(y = 5) 

ich einen Wert von 10. In diesem speziellen Fall erwarten würde, offensichtlich zweite die Funktion () kann das Objekt x nicht finden, da dieses in der ersten() Umgebung zugewiesen wurde.

Diese Art der Programmierung ist ähnlich ggplot(), zum Beispiel:

ggplot(aes(x = x, y = y), data = data) + 
    geom_point() 

Ich weiß, diese Art der Programmierung die Verwendung von Umgebungen schon sagt, aber ich kann es nicht die Arbeit. Irgendwelche Vorschläge?

Danke!

EDIT

Suchen Paket in Github ggplot ich es herausgefunden, denke ich:

hh_first <- function(data) { 

    h <- structure(list(data = data), class = c("hh")) 

    h 
} 

"+.hh" <- function(e1, e2) { 

    add_hh(e1, e2) 

} 

add_hh <- function(h, object) { 

    h$data <- paste(h$data, object, sep = "") 
    h$data 

} 

hh_second <- function(data) { 

    data 

} 

Zum Beispiel ...

hh_first('Hi') + 
    hh_second(', how are you?') 

einen String ‚Gibt Hallo, Wie geht es dir?'. Der Plusoperator arbeitet in diesem Fall mit Objekten der Klasse 'hh'. Irgendwelche Vorschläge in Bezug auf den Code oder vielleicht mögliche Fehler, die diese Art der Codierung erzeugen kann, sind willkommen.

+0

Nach erneutem Blick auf diese, ich habe möglicherweise verpasst, was Sie suchen, wenn so lassen Sie mich wissen und Ich werde die Antwort löschen oder aktualisieren. –

+0

Das von Ihnen referenzierte ggplot-Paradigma ist ziemlich kompliziert; Es verwendet tatsächlich eine eigene spezielle Funktion zum Hinzufügen von 'ggplot2 ::: add_ggplot'. – joran

+1

Das ggplot2-Paket überlädt den '+' -Operator und die Anweisungen zum Replizieren dieses Prozesses beinhalten das Erstellen einer neuen Klasse, die an den richtigen Code gesendet wird. Sie sollten nach generischen Funktionen suchen. Ich denke, diese Bitte ist zu weit gefasst. Wenn Sie sich für diese Route entscheiden, sollten Sie entweder Venables und Ripleys "S Programming" oder Hadleys "Advanced R" lesen. –

Antwort

1

Versuchen:

first <- function(x){ 
    return(x) 
} 

second <- function(x ,y){ 
    z <- x + y 
    return(z) 
} 

second(first(5), 5) 

ODER

myX <- first(5) 

second(myX, 5) 

ODER

library(magrittr) # Which uses pipes, %>%, to pass the results of a function to the first variable of the second function 
first(5) %>% second(5) 
+2

Mit Ihren Funktionen kann auch geschrieben werden: 'library (magritr); zuerst (5)%>% Sekunde (5) ' –

Verwandte Themen