Использование rlang::sym внутри определения списка
Я пишу сценарий R, и мне нужно разрешить пользователю указывать имя переменной, которая будет обрабатываться вручную, т.е.
var <- 'user_name'
Вообще то я имею в виду, что с помощью rlang::sym
и механизм цитирования / отмены цитирования. Тем не менее, мне нужно использовать tidyr::replace_na
и ни одна из моих идей не работала здесь, так как имя переменной должно быть указано внутри list
,
Как я могу сослаться на мой var
в таком случае? Я думал о чем-то вроде ниже:
data <- data %>% replace_na(list(sym(var) = 0))
Но это не сработало...
2 ответа
Решение
Мы также можем поставить 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))
Без использования каких-либо внешних пакетов, кроме 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))