/pause

pause and start evaluation of magrittr pipes

Primary LanguageROtherNOASSERTION

pause

The goal of pause is to fascilitate the processing of your data while maintaining the 'tidy' pipeing structure. By using the "pause" pipe, %//%, you stop the evaluation of a pipe and can start performing the next pipe. This keeps you from having to either create a temporary variable, or pipe-within-a-pipe. You then "fastforward" into a function that would have been taking the temporary variable with %>>>%. This keeps everying inline with your pipe.

Travis build status AppVeyor build status Coverage status lifecycle

Installation

You can install the developmental version of pause from github with remotes:

remotes::install_github("thebioengineer/pause")

Example

So this example is for showing a pause pipe (%//%) and then fastforward pipe(%>>>%) that shows the use cases that I ran across most often.

set.seed(42)

df<-data.frame(x=LETTERS,y=runif(26),z=sample(letters,26,replace = TRUE))
df2<-data.frame(x=LETTERS,w=sample(c(1,2),size = 26,replace = TRUE))

df %>%
  mutate(vowel=LETTERS%in%c("A","E","I","O","U","Y")) %>%
  filter(y>.5) %//%
df2 %>%
  filter(w==1) %>>>%
  left_join(by="x") %>%
  filter(!is.na(w))

This is exactly the same result if you were to do the following in standard pipe operations.

tempdf2<-df2 %>% 
  filter(w==1)

df %>%
  mutate(vowel=LETTERS%in%c("A","E","I","O","U","Y")) %>%
  filter(y>.5) %>% 
  left_join(tempdf2,by="x") %>%
  filter(!is.na(w))
  

This also allows you to pipe together multiple pauses, and each is considered a separate pause. The only time this is not true is when a pause starts with a function, in which case it is assumed the output of the prior pause is fed into this function as if it were a standard pipe.

# this pause:

df %>%
    mutate(vowel=LETTERS%in%c("A","E","I","O","U","Y")) %>%
    filter(y>.5) %//%
    filter(y>.75) %//%
    df2 %>%
    filter(y>.5) %>>>%
    bind_rows(.x1,.x2,.x3)
    
# is equivalent to:


temp1 <- df %>%
    mutate(vowel = LETTERS %in% c("A", "E", "I", "O", "U", "Y")) %>%
    filter(y > .5)
temp2 <- temp1 %>%
    filter(y > .75)
temp3 <- df2 %>%
    filter(y>.5)
    
testOutput<-bind_rows(temp1,temp2,temp3)

Please note that the 'pause' project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.