Использование rlang :: sym внутри определения списка - PullRequest
0 голосов
/ 29 августа 2018

Я пишу сценарий R, и мне нужно разрешить пользователю указывать имя переменной, которая будет обрабатываться вручную, т.е.

var <- 'user_name'

Обычно я ссылаюсь на это, используя rlang::sym и механизм цитирования / удаления. Однако мне нужно использовать tidyr::replace_na, и ни одна из моих идей не сработала, поскольку имя переменной должно быть указано внутри list.

Как я могу сослаться на мой var в таком случае? Я думал о чем-то вроде ниже:

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

Но это не сработало ...

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Мы также можем поместить 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))
0 голосов
/ 29 августа 2018

Без использования каких-либо внешних пакетов, кроме 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))
...