Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R: Using piping to pass a single argument to multiple locations in a function

Tags:

r

piping

magrittr

I am attempting to exclusively use piping to rewrite the following code (using babynames data from babynames package:

library(babynames)
library(dplyr)

myDF <- babynames %>% 
group_by(year) %>% 
summarise(totalBirthsPerYear = sum(n))

slice(myDF, seq(1, nrow(myDF), by = 20))

The closest I have gotten is this code (not working):

myDF <- babyNames %>% 
group_by(year) %>% 
summarise(totalBirthsPerYear = sum(n)) %>% 
slice( XXX, seq(1, nrow(XXX), by = 20))

where XXX is meant to be passed via pipes to slice, but I'm stuck. Any help is appreciated.

like image 679
user7988855 Avatar asked May 10 '17 00:05

user7988855


2 Answers

You can reference piped data in a different position in the function by using the . In your case:

myDF2 <- babynames %>%
    group_by(year) %>%
    summarize(totalBirthsPerYear = sum(n)) %>%
    slice(seq(1, nrow(.), by = 20))
like image 166
Andrew Jackson Avatar answered Sep 20 '22 14:09

Andrew Jackson


Not sure if this should be opened as a separate question & answer but in case anybody arrives here as I did looking for the answer to the MULTIPLE in the title: R: Using piping to pass a single argument to multiple locations in a function

Using the . from Andrew's answer in multiple places also achieves this.

[example] To get the last element of a vector vec <- c("first", "middle", "last") we could use this code.

vec[length(vec)]

Using piping, the following code achieves the same thing:

vec %>% .[length(.)] 

Hopefully this is helpful to others as it would have helped me (I knew about the . but couldn't get it working in multiple locations).

like image 27
Dave Avatar answered Sep 17 '22 14:09

Dave