2013-04-19 17 views
5

Ich habe eine Frage zu Referenzklassen. Meine Frage steht im Kontext eines von mir entwickelten R-Pakets rCharts. Es verwendet Referenzklassen, um interaktive Plots von R zu erstellen.Kann eine Referenzklasse zu Protokollaufrufen erstellt werden

Das Erstellen eines Plots beinhaltet eine Reihe von Aufrufen. Hier ist ein Beispiel, wo zuerst ein Streudiagramm erstellt wird und dann ein Liniendiagramm hinzugefügt wird.

p1 <- rPlot(mpg ~ cyl, data = mtcars, type = 'point') 
p1$layer(copy_layer = T, type = 'line') 

Da nun eine Referenzklasse wie ein Verschluss ist, dass ich mich gefragt, ob es möglich war, machte die Anrufe zu protokollieren. Die Idee ist, dass wenn ich die Reihenfolge der Aufrufe protokollieren kann, kann ich automatisch den Quellcode, der zum Erstellen einer Visualisierung verwendet wird, zusammen mit dem HTML einfügen.

Ich habe versucht zu sehen, ob ich sys.function oder match.call verwenden könnte, aber komme nicht überall hin. Wenn mir jemand zeigen kann, wie ich mich diesem Thema nähern kann, wäre das sehr zu begrüßen.

+2

Die Lösung sollte fair sein: in jeder Methode benötigen Sie etwas wie 'Anrufe << - c (Anrufe, Liste (match.call()))' – hadley

+0

Danke, das hat super funktioniert! Vielleicht sollte ich dies als eine andere Frage posten, aber was ist die empfohlene Methode, um eine Liste von Anrufen erneut auszuführen. – Ramnath

+2

Nur 'eval()' sie - aber wenn Sie das tun möchten, müssen Sie auch die Umgebung erfassen, in der sie mit 'parent.frame()' – hadley

Antwort

2

Wie @hadley erklärte:

calls <<- c(calls, list(match.call())) 

Froh, dass gearbeitet haben aussieht. Lass uns das geschlossen werden. :)