Description
Currently mutate()
and summarise()
only work with vectorised functions: functions that take a vector as input and return a vector (or "scalar") as output. I don't see any reason why summarise()
and mutate()
couldn't also accept tibbles. The existing restrictions would continue to apply so that in summarise()
the tibble would have to have exactly one row, and in mutate()
it would have to have either one row or n rows.
In other words, the following two lines of code should be equivalent:
df %>%
summarise(mean = mean(x), sd = sd(x))
df %>%
summarise(tibble(mean = mean(x), sd = sd(x))
This would allow you to extract that repeated pattern out into a function:
# and hence
mean_sd <- function(df, var) {
tibble(mean = mean(df[[var]]), sd = sd(df[[var]]))
}
df %>%
summarise(mean_sd(df, "x"))
We'd need to work on documentation to help people develop effective functions of this nature develop tools so that you could easily specify input variables (using whatever the next iteration of lazyeval provides) and name the outputs. But that's largely a second-order concern: we can figure out those details later.
Supporting tibbles in this way would be particular useful for dplyr as it would help to clarify the nature of functions like separate()
and unite()
which are currently data frame wrappers around simple vector functions.
These ideas are most important for summarise()
and mutate()
but I think we should apply the same principles to filter()
and arrange()
as well.
Activity
krlmlr commentedon Feb 21, 2017
aornugent commentedon Mar 28, 2017
huftis commentedon Nov 2, 2017
romainfrancois commentedon Dec 20, 2017
Now that we have
:=
and sort of going back to the initial #154, perhaps the lhs of:=
can be richer, i.e. something like this parses:From this 🐦 thread https://twitter.com/romain_francois/status/943399604065849344
romainfrancois commentedon Feb 23, 2018
I toyed with this syntax on the tie 📦 here: https://github.com/romainfrancois/tie
Now it just does a classic
summarise
of the rhs of:=
wrapped in alist
call, and then re-extracts into what is specified in the lhs, i.e. it does this:aornugent commentedon Mar 5, 2018
t-kalinowski commentedon Apr 11, 2018
23 remaining items