Performance

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

Simple test case

Run an experiment for 100000 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(100000, {
    paste(sample(letters,6,replace = T),collapse = "") == "rstats"
    })
  )
#    user  system elapsed 
#    1.27    0.00    1.27

Using magrittr's %>%

system.time(
  replicate(100000,{
    sample(letters,6,replace = T) %>%
      paste(collapse = "") %>%
      equals("rstats")
    })  
  )
#    user  system elapsed 
#   27.55    0.01   27.66

Using pipeR's %>>%

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

Using pipeR's Pipe object

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

Nested levels

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

# magrittr::`%>%`
system.time(lapply(1:1000, function(i) 
  rnorm(100) %>% c(rnorm(100),
    sapply(1:100, function(j) 
      rnorm(50) %>% c(rnorm(50))))))
#    user  system elapsed 
#   15.68    0.04   15.77
# pipeR::`%>>%`
system.time(lapply(1:1000, function(i) 
  rnorm(100) %>>% c(rnorm(100),
    sapply(1:100, function(j) 
      rnorm(50) %>>% c(rnorm(50))))))
#    user  system elapsed 
#    3.75    0.03    3.80

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