Defined as roughly : a %>.% b ~ { . <- a; b }; (with visible .-side effects).

pipe_left_arg %.>% pipe_right_arg

pipe_left_arg %>.% pipe_right_arg

pipe_left_arg %.% pipe_right_arg



left argument expression (substituted into .)


right argument expression (presumably including .)


eval({ . <- pipe_left_arg; pipe_right_arg };)


The pipe operator has a couple of special cases. First: if the right hand side is a name, then we try to de-reference it and apply it as a function or surrogate function.

The pipe operator checks for and throws an exception for a number of "piped into nothing cases" such as 5 %.>% sin(), many of these checks can be turned off by adding braces.

For some discussion, please see For some more examples, please see the package README For formal documentation please see For a base-R step-debuggable pipe please try the Bizarro Pipe %>.% and %.>% are synonyms.

The dot arrow pipe has S3/S4 dispatch (please see However as the right-hand side of the pipe is normally held unevaluated, we don't know the type except in special cases (such as the rigth-hand side being referred to by a name or variable). To force the evaluation of a pipe term, simply wrap it in .().


  • %.>%: dot arrow

  • %>.%: alias for dot arrow

  • %.%: alias for dot arrow


# both should be equal: cos(exp(sin(4)))
#> [1] 0.8919465
4 %.>% sin(.) %.>% exp(.) %.>% cos(.)
#> [1] 0.8919465
f <- function() { sin } # returns f() ignoring dot, not what we want 5 %.>% f()
#> function (x) .Primitive("sin")
# evaluates f() early then evaluates result with .-substitution rules 5 %.>% .(f())
#> [1] -0.9589243