Hallo consuli,
danke für den interessanten Beitrag. Kannst Du noch ein wenig genauer beschreiben, mit welcher Art von Datensatz Dein R da überfordert war? Ich gebe Dir natürlich Recht, dass R angelegt worden ist für typische Statistikprobleme (wir haben nur eine kleine Stichprobe untersucht und wollen trotzdem allgemeingültige Aussagen ableiten) und nicht für Big Data-Fragestellungen (wie werde ich all der Daten Herr und trenne wichtiges von unwichtigem).
Da ich selbst nie mit großen Datensätzen zu tun habe, muss ich nochmal nachfragen. Dein Beispiel mit 1 Mio Kunden, zu denen Daten aus zwei anderen Datenbanken gejoint werden müssen klingt erst einmal nicht sooo groß. Ich hätte jetzt gedacht, dass das R-eigene merge das hinkriegt und das draufgesetzte data.table darüber nur kurz lacht. Anscheinend ist Dein Beispiel aber komplexer oder umfangreicher als es in der Kurzdarstellung klingt?
Natürlich lautet die kanonische Antwort auf das Problem: Joins von Daten in DBMS lässt man das DBMS machen. Ich bin recht sicher, dass das auch die Antwort für den Hauptkonkurrenten Python, wahrscheinlich würde man das aber auch als C++-Programmierer am liebsten in SQL machen. So gesehen spricht es nicht gegen R als derzeit beste Statistiklösung.
consuli hat geschrieben:Dann gibt es weitere programmiertechnische Einschränkungen, dass R keine strikt durchstruktierte objektorientierte Programmiersprache ist
Das ist ein sehr guter Hinweis, weil das natürlich ein deutlicher Unterschied zum Hauptkonkurrenten Python ist. Objektiorientierung ist R ist sehr ungewöhnlich gelöst und dass es zwei bis drei verschiedene Objektorientierungssysteme gibt, ist nervig (hat Hadley Wickham eigentlich schon ein Objektsystem für R entwickelt? Vielleicht {tidy_obj}?). Python ist von Grund auf auf Objektorientierung ausgelegt und zieht das aus sehr schön durch, ohne übermäßig komplex zu werden. Vielleicht kommt mir das auch nur so vor, weil bei mir der Groschen zur Objektorientierung erst mit Python gefallen ist. Ich erinnere mich aber auch an Diskussionen, dass manchem Java-Fan die Objektorietierung von Python nicht strikt genug war (Encapsulation war da das Stichwort, IIRC, aber im Detail kriege ich das so schnell nicht mehr hin). Das deutet schon darauf hin, dass Objektorientierung auch eine Geschmacksfrage ist. Persönlich finde ich, dass man es mit der Objektorientierung auch schnell übertreiben kann und sie für Projekte geringer und mittlerer Komplexität nicht erforderlich ist, und wer schreibt schon wirklich umfangreiche Projekte in einer Statistiksprache?
und keine GUI Programmierung zulässt.
Und da stimme ich Dir voll zu. Man kann in R keine Programme schreiben, die für Otto-Normalnutzer aussehen, wie Programme in diesem Jahrhundert sonst aussehen. Ich denke, dass der Shiny-Hype etwas damit zu tun hat, dass man endlich was bewegtes Buntes präsentieren kann, was auf die Maus reagiert. Vielleicht unterschätze ich Shiny aber auch nur, weil ich mich noch nicht genügend damit beschäftigt habe. Jedenfalls sehe ich den Bonus von Python nicht in möglichen Geschwindigkeitsgewinnen sondern darin, dass es sowohl als general purpose Sprache als auch als Statistik- und Maschinenlernen-Sprache tauglich ist. Wenn irgendwas, dann könnte das mich irgendwann in diese Richtung ziehen. Derzeit zieht da aber noch nichts.
Ansonsten leidet R unter der Last seines Alters. Es hat sich viel Müll angesammelt. Eine frische, junge, neu zu erstellende Sprache könnte in der Syntax einiges aufräumen (heißt es na.rm = TRUE oder omit.na = TRUE oder method = "rm.na" oder...). Anstelle von Vereinheitlichung und Vereinfachung geht der Trend in R aber in eine andere Richtung. Hadley Wickham überredet gerade die Community, dass die kleinste sinnvolle Datenform nicht der Vector sondern der Dataframe sind, dass Funktionen als erstes Argument immer den zu bearbeitenden Dataframe haben müssen, weil dann alles so schön zur Pipe passt, die die Leute jetzt auch in Vignetten zu ihren Paketen verwenden, wo sie gar nicht hin gehört und man produziert eine Reihe von Coding Styles, die einander klar widersprechen und sich großteils nicht am früheren allgemeinen Gebrauch orientieren (der Punkt in Variablen- und Funktionsnamen ist extrem verbreitet in alten Funktionen und Argumenten, jetzt soll er durch den Unterstrich ersetzt werden, weil Menschen mit C++, Java- und Python-Hintergrund sonst verwirrt werden, weil es für die objektorientiert aussieht? Kleiner Tipp: Diese Leute können gar nicht früh genug lernen, dass Objektorientierung in R anders aussieht.)
In der Summe gewinnt R für mich derzeit ganz klar. Wie jogo schon schrieb: Kombination aus schneller Programmierung in R und schnellem Rechnen in den Teilen, die in FORTRAN und C implementiert sind.
LG,
Bernhard