When using magrittr pipes or ggplot2 reading the objects that you forgot
to enquo
is a pain. These functions can be run prior to
devtools::check
to return a data.frame
containing all the warnings
created when check
runs codetools::checkUsage
. Using this information actionable functions append rlang
syntax to fix the warnings.
remotes::install_github('yonicd/tidycheckUsage')
library(tidycheckUsage)
install.packages(c('dplyr'))
library(dplyr,warn.conflicts = FALSE,quietly = TRUE)
knitr::kable(tidycheckUsagePackage('dplyr'))
|file |line |object |col1 |col2 |path |fun |warning | |:----|:----|:-----------|:----|:----|:----|:----------------------|:---------------------------------------------------------| | | |dupe | | | |as.tbl_cube.data.frame |local variable ‘dupe’ assigned but may not be used | | | |index | | | |do.rowwise_df |local variable ‘index’ assigned but may not be used | | | |cols | | | |fmt_cols |local variable ‘cols’ assigned but may not be used | | | |measures | | | |fmt_measures |local variable ‘measures’ assigned but may not be used | | | |args | | | |fmt_pos_args |local variable ‘args’ assigned but may not be used | | | |type | | | |order_by |local variable ‘type’ assigned but may not be used | | | |type | | | |select_var |local variable ‘type’ assigned but may not be used | | | |first_type | | | |select_vars |local variable ‘first_type’ assigned but may not be used | | | |actual_type | | | |switch_rename |local variable ‘actual_type’ assigned but may not be used |
system('git clone https://github.com/hrbrmstr/slackr.git')
devtools::install('slackr')
tidycheckUsagePackage('slackr')
|file |line |object |col1 |col2 |path |fun |warning | |:------------|:----|:--------|:----|:----|:----------------------------------------|:----------|:------------------------------------------------------| |slackr_bot.r |57 |resp_ret |3 |10 |/Users/jonathans/projects/forks/slackr/R |slackr_bot |local variable ‘resp_ret’ assigned but may not be used | |slackr_bot.r |57 |resp_ret |3 |10 |/Users/jonathans/projects/forks/slackr/R |slackrBot |local variable ‘resp_ret’ assigned but may not be used | |slackr.R |41 |resp_ret |3 |10 |/Users/jonathans/projects/forks/slackr/R |slackr |local variable ‘resp_ret’ assigned but may not be used |
myfun <- function(x){
ret <- mtcars%>%
mutate(mpg2=mpg*x)
ret <- ret%>%
dplyr::mutate(mpg3=mpg2^2)
}
tidycheckUsage(fun = myfun)
|file |line |object |col1 |col2 |path |fun |warning | |:----|:----|:------|:----|:----|:----|:-----|:--------------------------------------------------| | |3 |%>% |16 |18 | |myfun |no visible global function definition for ‘%>%’ | | |4 |mpg |17 |19 | |myfun |no visible binding for global variable ‘mpg’ | | |4 |mutate |5 |10 | |myfun |no visible global function definition for ‘mutate’ | | |6 |%>% |13 |15 | |myfun |no visible global function definition for ‘%>%’ | | |7 |mpg2 |24 |27 | |myfun |no visible binding for global variable ‘mpg2’ |
Forking covr::report
a similar output is created for symbol usage in R
scripts.
tidycheckUsage::usage_report(tidycheckUsagePackage('sinew'))
Number of relevant symbols are counted then categorized by usage warnings:
codetools
rlang
Now we can use this information to place rlang
syntax instead of calling the object itself within a tidyverse
call.
To help make this painless the output from tidycheckUsage
is used to find and replace all those objects. This can be done with the tidy object and append_rlang
, for either small functions or whole packages.
x <- function(){
data <- tidyr::unite(mtcars, col = vs_am, c(vs,am))
ggplot2::ggplot(data = data, ggplot2::aes(x=mpg,y=qsec,colour=vs_am)) +
ggplot2::geom_point()
}
(obj <- tidycheckUsage(x))
file line object col1 col2 path fun warning_type warning
1 3 am 50 51 x no_global_binding no visible binding for global variable ‘am’
2 3 vs 47 48 x no_global_binding no visible binding for global variable ‘vs’
3 3 vs_am 38 42 x no_global_binding no visible binding for global variable ‘vs_am’
4 5 mpg 47 49 x no_global_binding no visible binding for global variable ‘mpg’
5 5 qsec 53 56 x no_global_binding no visible binding for global variable ‘qsec’
6 5 vs_am 65 69 x no_global_binding no visible binding for global variable ‘vs_am’
(x1 <- append_rlang(obj))
function ()
{
data <- tidyr::unite(mtcars, col = !!rlang::sym('vs_am'), c(!!rlang::sym('vs'), !!rlang::sym('am')))
ggplot2::ggplot(data = data, ggplot2::aes(x = !!rlang::sym('mpg'), y = !!rlang::sym('qsec'),
colour = !!rlang::sym('vs_am'))) + ggplot2::geom_point()
}
<environment: 0x10ceb96d8>
tidycheckUsage(x1)
NULL
x1()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.