Использование 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))
Другие вопросы по тегам