HILFE - Fehlendes Verständnis für die Funktionsweise...

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
butterkeks77
Beiträge: 1
Registriert: Sa Sep 07, 2019 3:02 pm

HILFE - Fehlendes Verständnis für die Funktionsweise...

Beitrag von butterkeks77 » Sa Sep 07, 2019 3:48 pm

Hallo liebe Community!

Im Rahmen meines Studiums bin ich derzeit mit der Erstellung einer Hausarbeit beschäftigt. Dabei untersuche ich eine Möglichkeit, die Standard-Farbpaletten des Pakets "ggplot2" mit selbst definierten Farben für die Dauer einer R-Session dauerhaft zu überschreiben. Dies soll für den jeweiligen User so einfach wie möglich nur durch einen bloßen Funktionsaufruf geschehen.

Jetzt muss ich noch dazu sagen, dass ich bis dato mit R keinerlei Erfahrungen und Berührungspunkte hatte und mich im Zuge der Hausarbeit erst damit auseinandergesetzt habe. Entsprechend viel Einarbeitung- und Recherchezeit musste ich zunächst investieren, um ein grundsätzlich Verständnis erst einmal zu entwickeln. Bitte seht es mir nach, wenn ich evtl. im Folgenden sehr dumme Verständnisfragen stellen werde.

Der Code für die oben beschriebene Problematik sieht bislang so aus und funktioniert auch!
----------------------------

Code: Alles auswählen

master <- function(
                    textColor = "#000000",
                    panelBackgroundColor = "#dee3d9",
                    test_colors = c("#009036", "#ec6602", "#c7d40d",
                                   "#d12b19", "#2095be", "#7cc119") )
                    {

  options(test_hex = test_colors) ######

  update_geom_defaults("point", list(color = test_palette(1), fill = test_palette(1)))     }

  test_palette <- function (x) {
                               test_colors <- getOption("test_hex") ####
                                    if (x > length(test_colors)) {
                                        test_colors <- colorRampPalette(test_colors)(x)
                                           }
                                        return(test_colors[1:x])      }

scale_colour_discrete <- function (...) {   ####
  discrete_scale("color", "brewer", palette = test_palette, ...)
}

scale_fill_discrete <- function (...) {
  discrete_scale("fill", "brewer", palette = test_palette, ...)
}

master()

ggplot(iris, aes(Sepal.Length, Petal.Length, color = Species)) +
  geom_point()
----------------------------------

Durch den Aufruf der FUnktion "master()" bekomme ich den gewünschten Erfolg und die ggplot2 Standardfarben werden durch meine eigenen ersetzt. Der oben stehende Code lässt sich problemlos in eine eigene R-Studio Session kopieren und kurz selbst testen!

Dies scheint die einzige Lösung zu sein, die ich durch recherchieren und selbst testen entdeckt habe. Allerdings verstehe ich bestimmte Stellen im Code und Funktionsweisen kaum bis gar nicht. Könnte mir ein Experte bitte die genaue Funktionsweise Schritt für Schritt erläutern? Es geht mir dabei vor allem um die fett gedruckten Teile im Code.

Also ich stelle fest, dass ich nur durch die Funktionen options(), getOption() und den scale_color/fill_discrete Funktionen bzw. den discrete_scale() Funktionen letztendlich die Problematik lösen kann. Sobald ich nämlich den in der letzten Zeile zu sehenden Beispiel-plot mit Iris durchführen möchte und entsprechend jede Spezies mit unterschiedlichen Farben dargestellt haben möchte, brauche ich wohl genau die Kombination aus diesen Funktionsaufrufen.
  • Hat es damit zu tun, dass beim plotten festgestellt wird, dass mehr als nur eine Farbe von der Funktion "test_palette" (meine eigenen Farben in Form von Hexcodes) benötigt wird und entsprechend die Standard-Werte (Farben) der discrete_scale() Funktion durch meine "test_palette" überschrieben sind und R sich daraus dann die gewünschte Farbanzahl herausholt. Ferner ist dies nur möglich über die durch options() deklarierte Variable "test_hex", die global über alle Funktionen hinweg gültig ist, aber nur in der Funktion "test_palette" aufgerufen wird durch getOption?
  • Ist der zweite Parameter der discrete_scale Funktion, also "brewer", wirklich nur ein frei wählbare Name oder muss dieser in dem Kontext mit "brewer" belegt sein?
  • Könnte mir auch im gleichen Zuge jemand die Funktionsweise der drei Punkte ... in seinen Worten nochmal genau erklären?
Ich bin mir natürlich bewusst, dass es die ?help Funktion gibt, mit der ich direkte Hilfebeschreibungen bekomme. Diese haben mir jedoch ehrlich gesagt nur bedingt bis gar nicht weitergeholfen, da die Hilfetext zumindest diesbezüglich relativ spärlich beschrieben sind. Nur meiner Meinung nach...

Ich wäre Euch wirklich sehr dankbar, wenn mir jemand weiterhelfen könnte... ich stehe in der Hinsicht echt ziemlich stark auf dem Schlauch und kann das einfach irgendwie nicht ganz und in ausreichender Form nachvollziehen... Vielen Dank im Voraus!

Hoffentlich konnte ich mich präzise genug ausdrücken und meine Problematik hervorheben...
Zuletzt geändert von jogo am Mo Sep 09, 2019 8:27 am, insgesamt 1-mal geändert.

ruedi_br
Beiträge: 37
Registriert: Do Mär 01, 2018 3:53 pm

Re: HILFE - Fehlendes Verständnis für die Funktionsweise...

Beitrag von ruedi_br » Mo Sep 09, 2019 11:40 am

Hilft dieser Fred von SO
[url]https://stackoverflow.com/questions/9944246/setting-defaults-for-geoms-and-scales-ggplot2[/url]
evtl. weiter?
Gruß
Ruedi
fortune(111)

Antworten