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

时间:2018-08-29 13:05:44

标签: r tidyr rlang quasiquotes

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

var <- 'user_name'

通常,我通常使用rlang::sym和引用/取消引用机制来引用它。但是,我需要使用tidyr::replace_na,我的想法在这里都没有用,因为必须在list中指定变量的名称。

在这种情况下,如何引用我的var?我在考虑以下问题:

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

但这没用...

2 个答案:

答案 0 :(得分:3)

我们还可以将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))

答案 1 :(得分:2)

除了使用for (int q = 0; q < i; q++) { umount(mountlist[sort[q]]); } 以外的任何外部软件包,我们都可以使用dplyr/tidyr

进行更改
setNames

数据

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