在列表定义中使用 rlang::sym

Using rlang::sym inside list definition

我正在编写一个 R 脚本,我需要允许用户指定将被手动处理的变量的名称,即

var <- 'user_name'

一般来说,我指的是使用rlang::sym和quoting/unquoting机制。但是,我需要使用 tidyr::replace_na 和 none 我的想法在这里起作用,因为变量的名称必须在 list 中指定。

在这种情况下,如何引用我的 var?我在想下面这样的事情:

data <- data %>% replace_na(list(sym(var) = 0))

但是没用...

不使用除dplyr/tidyr以外的任何外部包,我们可以用setNames

改变这个
library(dplyr)
library(tidyr)
data %>% 
    replace_na(as.list(setNames(0, var)))
#   user_name
#1         0
#2         3
#3         4

数据

data <- data.frame(user_name = c(NA, 3, 4))

我们也可以把replace_na放在mutate里面,不加引号:

library(dplyr)
library(tidyr)

var <- 'user_name'

data %>%
  mutate(!!var := replace_na(!!sym(var), 0))

结果:

  user_name
1         0
2         1
3         2
4         3
5         4
6         5

数据:

data <- data.frame(user_name = c(NA, 1:5))