Quantcast
Channel: R-bloggers
Viewing all articles
Browse latest Browse all 12081

Tidy evaluation, most common actions

$
0
0

(This article was first published on That’s so Random, and kindly contributed to R-bloggers)

Tidy evaluation is a bit challenging to get your head around. Even after reading programming with dplyr several times, I still struggle when creating functions from time to time. I made a small summary of the most common actions I perform, so I don’t have to dig in the vignettes and on stackoverflow over and over. Each is accompanied with a minimal example on how to implement it. I thought others might find this useful too, so here it is in a blog post. This list is meant to be a living thing so additions and improvements are most welcome. Please do a PR on this file or send an email.

library(tidyverse)

bare to quosure: quo

bare_to_quo<-function(x,var){x%>%select(!!var)%>%head(1)}bare_to_quo(mtcars,quo(cyl))
##           cyl
## Mazda RX4   6

bare to quosure in function: enquo

bare_to_quo_in_func<-function(x,var){var_enq<-enquo(var)x%>%select(!!var_enq)%>%head(1)}bare_to_quo_in_func(mtcars,mpg)
##           mpg
## Mazda RX4  21

quosure to a name: quo_name

bare_to_name<-function(x,nm){nm_name<-quo_name(nm)x%>%mutate(!!nm_name:=42)%>%head(1)%>%select(!!nm)}bare_to_name(mtcars,quo(this_is_42))
##   this_is_42
## 1         42

quosure to text: quo_text

quo_to_text<-function(x,var){var_enq<-enquo(var)ggplot(x,aes_string(rlang::quo_text(var_enq)))+geom_density()}plt<-quo_to_text(mtcars,cyl)

Note that tidy evaluation is not yet implemented in ggplot2, but this will be in future versions. This is a workaround for the meantime, when combining dplyr and ggplot2.

character to quosure: sym

char_to_quo<-function(x,var){var_enq<-rlang::sym(var)x%>%select(!!var_enq)%>%head(1)}char_to_quo(mtcars,"vs")
##           vs
## Mazda RX4  0

multiple bares to quosure: quos

bare_to_quo_mult<-function(x,...){grouping<-quos(...)x%>%group_by(!!!grouping)%>%summarise(nr=n())}bare_to_quo_mult(mtcars,vs,cyl)
## # A tibble: 5 x 3
## # Groups:   vs [?]
##      vs   cyl    nr
##     
## 1     0     4     1
## 2     0     6     3
## 3     0     8    14
## 4     1     4    10
## 5     1     6     4

multiple characters to quosure: syms

bare_to_quo_mult_chars<-function(x,...){grouping<-rlang::syms(...)x%>%group_by(!!!grouping)%>%summarise(nr=n())}bare_to_quo_mult_chars(mtcars,list("vs","cyl"))
## # A tibble: 5 x 3
## # Groups:   vs [?]
##      vs   cyl    nr
##     
## 1     0     4     1
## 2     0     6     3
## 3     0     8    14
## 4     1     4    10
## 5     1     6     4

quoting full expressions

Altough quoting column names is most often used, it is by no means the only option. We can use the above to quote full expressions.

filter_func<-function(x,filter_exp){filter_exp_enq<-enquo(filter_exp)x%>%filter(!!filter_exp_enq)}filter_func(mtcars,hp==93)
##    mpg cyl disp hp drat   wt  qsec vs am gear carb
## 1 22.8   4  108 93 3.85 2.32 18.61  1  1    4    1
var vglnk = { key: '949efb41171ac6ec1bf7f206d57e90b8' }; (function(d, t) { var s = d.createElement(t); s.type = 'text/javascript'; s.async = true; s.src = '//cdn.viglink.com/api/vglnk.js'; var r = d.getElementsByTagName(t)[0]; r.parentNode.insertBefore(s, r); }(document, 'script'));

To leave a comment for the author, please follow the link and comment on their blog: That’s so Random.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...


Viewing all articles
Browse latest Browse all 12081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>