Als jemand der beides benutzt und nicht gefangen ist (ist was anders wenn man nur das eine lernt) hab ich vermutlich leicht reden...
Ich finde das Engagement von RStudio gut und wichtig für R.
RStudio entwickelt sehr viel und wendet viele Ressourcen für open source Entwicklung auf.
Sie haben dadurch R nach vorne gepuscht (auch durch ihre ganzen Top-Mitarbeiter die sie beschäfftigen / abgeworben haben) und ohne sie wäre R vermutlich nicht da wo es jetzt ist. Vorallem nicht auch bei der Akzeptanz in der Industrie. Und da hat R auch noch gut was aufzuholen - da braucht es kommerzielle Firmen die das unterstützen und das Bindeglied sind.
Vieles von den Entwicklugen sind natürlich nicht uneigennützig (z.b. dieDatenbank-Treiber von RStudio, ...)
Was es braucht ist mehr Diversität auf dem Markt.
Die anderen Player puschen nur in spezifische Richtungen, RStudio durch ihre Größe (150 Mitarbeiter?) in mehrere Richtungen:
Es gibt einige Consulting-Firmen (z.B. Open Analytics, thinkr, win-vector,...) die auch OpenSource R Entwicklung machen und R in ihrer Sparte voran bringen. Die leisten aber in der Summe wesentlich weniger als RStudio (die vermutlich mehr Spielraum haben?)?
Dann gibt es einige wenige Firmen die R unterstützen, das kommt mir aber eher vor als dass es an Personen hängt als an der Firma (z.B. H2O mit Matt Dowle, Dirk Eddelbuettel, Mar...).
Dann gibt es Unis die gut pushen (z.b. Uni Münster im GIS bereich).
Das R-Consortium ist eine gut Initiative und könnte den Markt etwas bereichern bzw. auch breit pushen https://www.r-consortium.org/projects/awarded-projects.
Davon braucht es mehr!
Einige von Norms Argumenten kann ich nicht folgen:
Das tapply Beispiel:
Code: Alles auswählen
> mtcars %>%
+ group_by(cyl,gear) %>%
+ summarize(mean(mpg))
# A tibble: 8 x 3
# Groups: cyl [3]
cyl gear `mean(mpg)`
<dbl> <dbl> <dbl>
1 4 3 21.5
2 4 4 26.9
3 4 5 28.2
4 6 3 19.8
5 6 4 19.8
6 6 5 19.7
7 8 3 15.0
8 8 5 15.4
> tapply(mtcars$mpg,list(mtcars$cyl,mtcars$gear),mean)
3 4 5
4 21.50 26.925 28.2
6 19.75 19.750 19.7
8 15.05 NA 15.4
Hier kann man den tapply output nur mit viel aufwand weiterverwenden. Dplyr output ist viel besser.
purrr vs R
Code: Alles auswählen
mtcars %>%
split(.$cyl) %>%
map(~ lm(mpg ~ wt, data = .)) %>%
map(summary) %>%
map_dbl("r.squared")
# output
4 6 8
0.5086326 0.4645102 0.4229655
Here's base-R:
lmr2 <- function(mtcSubset) {
lmout <- lm(mpg ~ wt,data=mtcSubset)
summary(lmout)$r.squared
}
u <- split(mtcars,mtcars$cyl)
sapply(u,lmr2)
Ich hätte geschreiben:
Dann ist da kein Unterschied (außer dass ich vermutlich noch list-cols verwendet hätte um Daten, Model & Summaries in einem Object zu haben.
Vielleicht auch weil ich nicht im tidyverse gefangen bin...
Pipes sehe ich nicht als teil vom tidyverse an und sind generell nützlich (so wie auch in Linux). Ich gebe aber zu dass die auswüchse von so machen tidyverse Advokaten etwas komisch sind: https://stackoverflow.com/questions/45416543/how-to-extract-single-element-from-dataframe-using-magrittr/45416656#45416656
Ich stimme Norm zu, dass man um R effizient nutzen zu können nicht nur im tidyverse unterwegs sein sollte.
base-R ist essentiell.
tidyverse ein convenience zusatz. Im Zweifel kommt man mit base-R aber immer zum Ziel (und im tidyverse nur beding oder auf umwegen).
Was mir ganz und gar nicht an der tidyverse-Kultur gefällt (ich nenne hier explizit nicht RStudio, weil tidyverse != RStudio - das sind mehr Leute):
Das absichtliche herbeiführen von Namespace konflikten mit base-R funktionen: (z.b. lag, filter, ...). Das musste nicht sein und führt zu Problemen.
Die Ignoranz zu bestehenden Projekten: Man hätte auch data.table mit den ganze Ressourcen besser machen können (z.b. fread) anstatt neu zu machen. Ähnliches gilt für andere tidyverse Pakete die keine neue Funktionalität bringen. Soweit so gut - open source kann man machen. Aber dann das marketing / predigen gegen die Alternativen finde ich nicht gut.
Breaking changes: Ziemlich häufig und mit wenig Gefühl für die Abhängigkeiten. Hat mich schon einaar mal gebissen
Falsche Aussagen: Z.B. tibbles verhalten sich genauso wie data.frames (bzw. sind davon inherited). Das stimmt nicht und einige Funktionen (z.b. bei model-funktionen) liefern falsche Ergebnisse wenn man sie mit tibbles füttert. Das ist gefährlich (vorallem wenn es nicht weiß bzw. einem suggeriert wird das alles genauso funktioniert). Mein Rat: Sobald ihr aus dem tidyverse rausgeht: zu data.frame konvertieren! (Gilt aber auch für data.tables).
Die Abhängigkeiten generell: Ich würde jedem abraten library("tidyverse") zu verwenden, sondern immer nur bewusst und spezifisch.
Soweit mal meine unsortieren Gedanken... Vielleicht muss ich mir da mal noch in Ruhe Gedanken machen...