Unclear warning when defining custom pipe operator

爱⌒轻易说出口 提交于 2021-01-27 21:41:12

问题


In my process I need to perform many dplyr::inner_joins. Thought I might define a custom pipe operator for it as explained here:

library(tidyverse)
library(rlang)

df1 <- tibble(a = 1:10, b = 11:20)
df2 <- tibble(a = 1:10, c = 21:30)

`%J>%` <- function(lhs, rhs){
  inner_join(lhs, rhs)
}

df1 %J>% df2

This works as expected and I get:

Joining, by = "a"
# A tibble: 10 x 3
       a     b     c
   <int> <int> <int>
 1     1    11    21
 2     2    12    22
 3     3    13    23
 4     4    14    24
 5     5    15    25
 6     6    16    26
 7     7    17    27
 8     8    18    28
 9     9    19    29
10    10    20    30

But then also a warning:

Warning message:
`chr_along()` is soft-deprecated as of rlang 0.2.0.
This warning is displayed once per session.

Plot thickens if I don't include library(rlang) at all (in a new session), in which case I get no warnings:

library(tidyverse)

df1 <- tibble(a = 1:10, b = 11:20)
df2 <- tibble(a = 1:10, c = 21:30)

`%J>%` <- function(lhs, rhs){
  inner_join(lhs, rhs)
}

df1 %J>% df2

Obviously I don't have to include library(rlang) at all in this example, but if I did - this is one weird warning. Where is it coming from and how to avoid it if I did wanted to include library(rlang)?

sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)

Matrix products: default

locale:
[1] LC_COLLATE=English_Israel.1252  LC_CTYPE=English_Israel.1252    LC_MONETARY=English_Israel.1252 LC_NUMERIC=C                    LC_TIME=English_Israel.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] rlang_0.3.0.1   forcats_0.3.0   stringr_1.3.1   dplyr_0.7.6     purrr_0.2.5     readr_1.1.1     tidyr_0.8.1     tibble_1.4.2    ggplot2_3.1.0   tidyverse_1.2.1

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.19     cellranger_1.1.0 pillar_1.3.0     compiler_3.5.1   plyr_1.8.4       bindr_0.1.1      tools_3.5.1      packrat_0.4.9-3  jsonlite_1.5     lubridate_1.7.4  nlme_3.1-137    
[12] gtable_0.2.0     lattice_0.20-35  pkgconfig_2.0.2  cli_1.0.1        rstudioapi_0.8   haven_1.1.2      bindrcpp_0.2.2   withr_2.1.2      xml2_1.2.0       httr_1.3.1       hms_0.4.2       
[23] grid_3.5.1       tidyselect_0.2.4 glue_1.3.0       R6_2.2.2         fansi_0.3.0      readxl_1.1.0     modelr_0.1.2     magrittr_1.5     backports_1.1.2  scales_1.0.0     rvest_0.3.2     
[34] assertthat_0.2.0 colorspace_1.3-2 utf8_1.1.4       stringi_1.2.4    lazyeval_0.2.1   munsell_0.5.0    broom_0.5.0      crayon_1.3.4

回答1:


From your description, I would say that If you load rlang as part of the tidyverse, (i.e. just load tidyverse), then R will use the verse's rlang which is automatically updated whithin the verse. If you load tidyverse first and then rlang, then R will use the last seen one, which is the one you loaded manually. Thus, If you did not update rlang manually then It will give the warning. The problem should go away If you manually update rlang.



来源:https://stackoverflow.com/questions/54517197/unclear-warning-when-defining-custom-pipe-operator

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!