[Here you can see the Building views with R cheat sheet at a full resolution]
Queries
In database theory a query is a request for data or information from a database table or combination of tables.
Since dplyr
we have something that quite closely conceptually resembles a query in R
:
I particularly appreciate of dplyr
the possibility of building my query as a step by step set of R
statement that I can progressively test at each step.
Views
Again in database theory, a view is the result set of a stored query on the data, which the database users can query just as they would in a table.
I would like to have something similar to a view in R
As far as I know, I can achieve this goal in three ways:
- Function
makeActiveBinding
- Operator
%>a%
from packagepryr
- My proposed `%>>% operator
Function makeActiveBinding()
Function makeActiveBinding(sym, fun, env)
installs a function in an environment env
so that getting the value of sym
calls fun
with no arguments.
As a basic example I can actively bind a function that simulates a dice to an object named dice
:
so that:
Similarly, I can wrap adplyr
expression into a function:
and then actively bind it to a symbol:
so that, any time we call view
the result of function f()
is computed again:
As a result, if I change any value of mpg
within mtcars
, view
is automatically updated:
Clearly, I have to admit that all of this looks quite unfriendly, at least to me.
Operator %<a-%
A valid alternative, that wraps away the complexity of function makeActiveBinding()
is provided by operator %<a-%
from package pryr
:
Again, if I change any value of mpg
within mtcars
, the value of view
get automatically updated:
Note that in this case I have to enclose the whole expression within curly brackets.
Moreover, the final assignment: %<a-%
goes on the left hand side of my chain of dplyr
statements.
Operator %>>%
Finally I would like to propose a third alternative, still based on makeActiveBinding()
, that I named %>>%
that can be used as:
And again, if I change the values of mpg
:
The content of view
changes accordingly
I believe this operator offers two advantages:
- Avoids the usage of curly brackets around my
dplyr
expression - Allows me to actively assign the result of my chain of
dplyr
statements, in a more natural way at the end of the chain
This is great! Thanks for sharing!
See also https://cran.r-project.org/web/packages/refset/index.html
Thank you for your post. This is excellent information. It is amazing and wonderful to visit your site.
data science training