3

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

var <- 'user_name'

一般来说,我指的是使用rlang::sym和引用/取消引用机制。但是,我需要使用tidyr::replace_na并且我的想法在这里都不起作用,因为变量的名称必须在list.

var在这种情况下我该如何参考我的?我在想像下面这样的事情:

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

但它没有用...

4

2 回答 2

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))
于 2018-08-29T14:13:35.893 回答
2

在不使用 以外的任何外部包的情况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))
于 2018-08-29T13:50:52.027 回答