Performance

pipeR operator and Pipe object can achieve high performance especially when they are intensively called.

Simple test case

Run an experiment for 10000 times. Each time we take a random sample from lower letters (a-z) with replacement, paste these letters together and see whether it equals the string rstats.

Native implementation

system.time(
  replicate(10000, {
    paste(sample(letters,6,replace = T),collapse = "") == "rstats"
    })
  )
#    user  system elapsed 
#    0.13    0.00    0.10

Using magrittr's %>%

system.time(
  replicate(10000,{
    sample(letters,6,replace = T) %>%
      paste(collapse = "") %>%
      equals("rstats")
    })  
  )
#    user  system elapsed 
#    2.80    0.00    2.86

Using pipeR's %>>%

system.time({
  1:10000 %>>% lapply(function(i) {
    sample(letters,6,replace = T) %>>%
      paste(collapse = "") %>>%
      equals("rstats")
    })    
  })
#    user  system elapsed 
#    0.29    0.00    0.30

Using pipeR's Pipe object

system.time(
  replicate(10000, {
    Pipe(sample(letters,6,replace = T))$
      paste(collapse = "")$
      equals("rstats") []
    })
  )
#    user  system elapsed 
#    0.43    0.00    0.44

Nested levels

The more levels the operator is nested in iterations, the larger the performance difference will be.

# magrittr::`%>%`
system.time(lapply(1:100, function(i) 
  rnorm(100) %>% c(rnorm(100),
    sapply(1:100, function(j) 
      rnorm(50) %>% c(rnorm(50))))))
#    user  system elapsed 
#    2.11    0.00    2.12
# pipeR::`%>>%`
system.time(lapply(1:100, function(i) 
  rnorm(100) %>>% c(rnorm(100),
    sapply(1:100, function(j) 
      rnorm(50) %>>% c(rnorm(50))))))
#    user  system elapsed 
#    0.30    0.00    0.29

These packages use different set of symbols and are thus compatible with each other. You may choose according to your needs and considerations.