R are popular, the most popular one being
magrittr as used by
This note will discuss the advanced re-usable piping systems:
rqdatatable operator trees and
wrapr function object pipelines. In each case we have a set of objects designed to extract extra power from the
wrapr dot-arrow pipe
This note is a comment on some of the timings shared in the dplyr-0.8.0 pre-release announcement.
The original published timings were as follows:
With performance metrics: measurements are marketing. So let’s dig in the above a bit.
In August of 2003 Thomas Lumley added
R 1.8.1. This gave
R users an explicit Lisp-style quasiquotation capability.
bquote() and quasiquotation are actually quite powerful. Professor Thomas Lumley should get, and should continue to receive, a lot of credit and thanks for introducing the concept into
bquote() is already powerful enough to build a version of
dplyr 0.5.0 with quasiquotation semantics quite close (from a user perspective) to what is now claimed in
Let’s take a look at that.
Let’s take this as an excuse to take a quick look at what happens when we try a task in both systems.
R Tip: be wary of “
The following code example contains an easy error in using the R function
vec1 <- c("a", "b", "c") vec2 <- c("c", "d") unique(vec1, vec2) #  "a" "b" "c"
Notice none of the novel values from
vec2 are present in the result. Our mistake was: we (improperly) tried to use
unique() with multiple value arguments, as one would use
union(). Also notice no error or warning was signaled. We used
unique() incorrectly and nothing pointed this out to us. What compounded our error was
...” function signature feature.
In this note I will talk a bit about how to defend against this kind of mistake. I am going to apply the principle that a design that makes committing mistakes more difficult (or even impossible) is a good thing, and not a sign of carelessness, laziness, or weakness. I am well aware that every time I admit to making a mistake (I have indeed made the above mistake) those who claim to never make mistakes have a laugh at my expense. Honestly I feel the reason I see more mistakes is I check a lot more.
wrapr includes a lot of tools for writing better
%.>%(dot arrow pipe)
data.framebuilders and formatters )
:=(named map builder)
%.|%(reduce/expand args) NEW!
DebugFnW()(function debug wrappers)
λ()(anonymous function builder)
I’ll be writing articles on a number of the new capabilities. For now I just leave you with the nifty operator coalesce notation.