在列表定义中使用 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))
我正在编写一个 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))