R - "Clean Code"?

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Informatikloser

R - "Clean Code"?

Beitrag von Informatikloser »

Hallo.
Ich habe eine Frage bezüglich "clean code" in R.
Gibt es sowas für R überhaupt?
Welche "Regeln" sollte man aufjedenfall beachten um seinen Code so sauber wie möglich zu halten?

Ich lese momentan das Buch "R für Dummies" von Andrie de Vries und Joris Meys.
Dort wurde zwar clean code angesprochen jedoch keine Vorgaben dazu gemacht.
Ich habe mir diese Frage gestellt da ich bei verschiedenen Übungsaufgaben verschiedene Arten der Problemlösung gefunden habe.
So werden Variablen oft auch mit "=" anstatt "<-" definiert.
Dataframes werden mit "row.names" und vordefinierten Vektoren erstellt, andere benutzen z.B. "data.frame("Alter"=c(14,16,21,18))"
etc.

Ich habe die Suchfunktion mit den Begriffen "Clean code" und "sauberer code" verwendet, jedoch nichts gefunden.
Ich bedanke mich für die zukünftigen Antworten.
Curnen
Beiträge: 27
Registriert: Fr Nov 18, 2016 3:45 pm

Re: R - "Clean Code"?

Beitrag von Curnen »

Tut mir leid, ich hab da bislang noch nicht so viel Ehrgeiz rein investiert - wenn es läuft, ist es für mich oft schon ausreichend. Als Einzelkämpfer bin ich bislang noch nicht in der Situation gewesen, R Code so schreiben zu müssen, dass es jemand anderes versteht. Meinen eigenen Murks kann ich dank ein paar Kommentaren meistens doch noch nachvollziehen...

Ich fand als Lektüre zu den Dos and Donts beim Schreiben von R-Code aber das R-Inferno von Patrick Burns ganz hilfreich.

VG
Matthias
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: R - "Clean Code"?

Beitrag von EDi »

Ich richte mich nach https://style.tidyverse.org
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: R - "Clean Code"?

Beitrag von bigben »

Da habe ich vor längerer Zeit mal einen Blogpost gelesen, den ich auf die schnelle nicht finde. Dort hatte man den R style guide von tidyverse mit dem von Google verglichen und -und das fand ich klasse- mit dem tatsächlich auf github geposteten Code verglichen. Im Ergebnis kam heraus, dass es eine ganze Reihe von Style Guides gibt, dass die genannten berühmten aber nicht die Praxis der R'ler widerspiegelt.

Man schaue auch hier für weitere Style guides: http://jef.works/R-style-guide/ unter der Überschrift "References and Resources".

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: R - "Clean Code"?

Beitrag von jogo »

Wenn man erstmal erkannt hat (vielleicht durch leidvolle Erfahrungen), dass es doch einen Zusammenhang gibt zwischen dem Schreiben von funktionierendem Code und dem Schreiben von lesbarem Code, dann ist das Interesse an einem guten (oder gar "besten" Stil) geweckt. Verschiedene Styleguides zeigen grob gesehen alle in die gleiche Richtung, geben aber im Detail verschiedene Empfehlungen. Solche Empfehlungen sind gut und richtig und nach deren Lektüre hat man wieder einen anderen Blich auf eigene und fremde Quelltexte.
Meine Meinung dazu ist, dass man solche Styleguides nicht als Dogma nehmen muss, sondern dass man den eigenen Code auch bezüglich der Lesbarkeit selbstkritisch betrachtet (möglichst einige Wochen später). Der Rest kommt dann mit der Erfahrung und Übung.

Zumindest könnte ich für die Stellen des Codes, an denen ich von meinem üblichen Stil abweiche, eine Begründung abgeben, warum ich das an der Stelle tue. - So eine Begründung ist dabei keinesfalls allgemeingültig sondern sehr subjektiv.

Gruß, Jörg
(Programmieren seit 1981)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: R - "Clean Code"?

Beitrag von bigben »

Welche "Regeln" sollte man aufjedenfall beachten um seinen Code so sauber wie möglich zu halten?
Es gibt einige Regeln, die für alle Sprachen gleichermaßen gelten. Zum Beispiel, dass man lieber viele kleine Funktionen schreibt, deren Richtigkeit sich besser überblicken lässt als ein langes Listing. Zum Beispiel, dass Variablennamen sprechen sollten (dazu müssen sie nicht lang sein, aber ein 'i' ist in der Regel eine Schleifenvariable und ein 'n' ist normalerweise ganzzahlig, ein 'x' ist eher nicht ganzzahlig). Kommentare sind nützlich, wenn es nicht zuviele sind. Das hier ist sicher ein schlechtes Beispiel:

Code: Alles auswählen

x <- 1  # x auf 1 setzen
Eine gute Regel ist meist, dass Werte nur als Argumente in Funktionen eingehen und nur als Rückgabewert herauskommen. Das bedeutet eine Reduktion von globalen Variablen und das Vermeiden von Konstruktionen wie '<<-'.
Im Forum tauchen immer mal wieder Konstruktionen auf, in denen Variablennamen durchnummeriert werden. Die heißen dann datum1, datum2, datum3, datum4, datum5,..., datum312. Und in der Folge wird dann gefragt, wie man auf solche Konstruktionen in einer Schleife zugreifen kann. Wenn sowas passiert, dann wäre fast immer eine Liste von Variablen (oder ein Vektor von Werten) der viel bessere Ansatz gewesen. Vielleicht ist das eine gute Empfehlung: Nutze Listen und Vektoren, um Dinge zusammenzufassen.
So werden Variablen oft auch mit "=" anstatt "<-" definiert
Ich mache das für mich einheitlich und würde jedem Anfänger empfehlen, es einheitlich zu machen. Dann wiederum ist es mir völlig egal, welches von beidem man nimmt. Mir hat sich nie erschlossen, warum man Variablen mit '<-' zuweist, Argumente aber mit '=' zuweist. Also

Code: Alles auswählen

> a <- mean(x=5, na.rm=TRUE)  # so wird es gemacht
> a <- mean(x<-5, na.rm<-TRUE)  # das versteht R nicht und ein Fehler wird nur geworfen, wenn man Glück hat.
Error in mean.default(x <- 5, na.rm <- TRUE) : 
  'trim' muss nummerisch sein und Länge 1 haben
Das allein wäre für mich ein guter Grund, Zuweisungen immer mit '=' zu machen, ich habe mich aber schon an '<-' gewöhnt. Solche Kleinigkeiten sind aber nicht das eigentliche Problem, sondern lenken vom eigentlichen eher ab.

Vektorwertige Datenverarbeitung ist nicht nur schneller als Schleifen, oft ist sie auch kürzer, deshalb lesbarer und Fehler leichter zu entdecken. Von anderen Sprachen kommende Anfänger basteln gerne sowas

Code: Alles auswählen

a <- 1:10
b <- numeric(0)

for(i in length(a)){
  b[i] <- a[i]*3
}
Da ist ein schlichtes b <- a*3 nicht nur effizienter, sondern auch der besser zu lesende Code.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten