new package: tidylog - feedback for basic dplyr operations

You can make sure that tidylog is always positioned at the right place on the search path by doing :

.onLoad <- function(libname, pkgname){
  setHook(packageEvent("dplyr", "attach"),
          function(...) {
            detach("package:tidylog")
            library(tidylog, warn.conflicts = FALSE, quietly = TRUE )}
} 

`

3 Likes

Well conceived. Lots of sound programming concepts. Conceptually helpful to have meaningful failure as well. See how the tableone package provides feedback if a function attribute calls a variable that is not present in the data table.

This is a good idea, but R CMD CHECK complains that a package shouldn't change the search path. So with this code the package probably wouldn't make it to CRAN.

1 Like

This is good to know, thanks!

If you want to avoid masking all the dplyr functions and log selectively you could use my package mmpipe and define an adequate operator, here is a quick implementation :

# devtools::install_github("moodymudskipper/mmpipe")
library(dplyr)
library(mmpipe)
# we define a pipe that will replace the function used on the rhs by its 
# equivalent in the tidylog package
mmpipe::add_pipe(`%tlog>%`, {
  # equivalent to x <- list(my_fun = quote(tidlog::my_fun))
  x <- setNames(list(call("::",quote(tidylog),body[[1]])),as.character(body[[1]]))
  # use x to substitute the original fun with the tidylog one
  eval(substitute(substitute(body,x),list(body=body)))}
)

Let's use it and log only the filter operation :

iris %>% 
  select(Petal.Length,Species) %tlog>%
  filter(Petal.Length > 5) %>%
  head
# filter: removed 108 out of 150 rows (72%)
#   Petal.Length    Species
# 1          5.1 versicolor
# 2          6.0  virginica
# 3          5.1  virginica
# 4          5.9  virginica
# 5          5.6  virginica
# 6          5.8  virginica
5 Likes

This looks like a great package Ben! Very useful info to have automatically returned.

Thanks for the contribution. We'll be giving it a trial run in our current project and will send comments/suggestions/bug reports as appropriate.

1 Like

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.