如何将数据屏蔽变量名转换为字符串(在 R 中)

How can I convert a data-masked variable name to a string (in R)

我正在编写一个函数(在 R 中),我想对其使用数据屏蔽,以便可以轻松传递变量名。我已阅读 Programming with dplyr 并了解如何通过拥抱它在函数内部使用我的变量。但是,我也想做一个连接,需要传递一个字符串给它。

以下代码是我正在尝试做的事情的 MWE,它可以工作。但是,对于连接,我有这个硬编码,如果我想通过不同的变量连接,将无法工作。

如何使用数据屏蔽轻松获取变量,然后将其转换为字符串以便在连接中使用?

谢谢!

dat1 <- tibble::tibble(dat1.v1 = 1:10, dat1.v2 = 101:110)
dat2 <- tibble::tibble(dat2.var1 = 1:10, dat2.var2 = 1001:1010)
my.func <- function(df1, df2, my.var){
  df1 <- df1 %>%
    mutate("{{my.var}}.plus.one" := {{my.var}} + 1)
  left_join(df2, df1, by=c("dat2.var1" = "dat1.v1"))
}
my.func(dat1, dat2, dat1.v1)

我不知道在连接中使用 by 参数以本机方式执行此操作的简洁方法。 这种方法对我有用。

library(tidyverse)
dat1 <- tibble::tibble(dat1.v1 = 1:10, dat1.v2 = 101:110)
dat2 <- tibble::tibble(dat2.var1 = 1:10, dat2.var2 = 1001:1010)

my_func <- function(df1, df2, my_var){
  df2 <- df2 %>% 
    rename({{ my_var }} := dat2.var1)
  df1 <- df1 %>% 
    mutate("{{ my_var }}.plus.one" := {{ my_var }} + 1) %>% 
    right_join(df2)
  df1
}
my_func(dat1, dat2, dat1.v1)
#> Joining, by = "dat1.v1"
#> # A tibble: 10 × 4
#>    dat1.v1 dat1.v2 dat1.v1.plus.one dat2.var2
#>      <int>   <int>            <dbl>     <int>
#>  1       1     101                2      1001
#>  2       2     102                3      1002
#>  3       3     103                4      1003
#>  4       4     104                5      1004
#>  5       5     105                6      1005
#>  6       6     106                7      1006
#>  7       7     107                8      1007
#>  8       8     108                9      1008
#>  9       9     109               10      1009
#> 10      10     110               11      1010