квазиквотация с помощью sjlabelled :: val_labels () - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь использовать sjlabelled::val_labels(), чтобы применить метки значений, где имя переменной, метка и метка кавычки заключены в кавычки.

Вот пример без кавычки:

library(sjlabelled)
library(rlang)
library(magrittr)

mtcars.test <- mtcars %>%
  val_labels(
    gear = c("foo" = 1)
  )
attributes(mtcars.test$gear)
#> $labels
#> foo 
#>   1

Легко использовать квазиквотацию для имени переменной, и имя значения, кажется, автоматически не заключено в кавычки, если оно представляет собой строку символов:

variable <- "gear"
value <- 1
mtcars.test <- mtcars %>%
  val_labels(
    !!variable := c("foo" = value)
  )
attributes(mtcars.test$gear)
#> $labels
#> foo 
#>   1

Когда я застреваю, происходит отмена цитирования имени метки:

label <- "foo"
mtcars.test <- mtcars %>%
  val_labels(
    !!variable := c(!!label := !!value)
  )
#> `:=` can only be used within a quasiquoted argument

Документация для ?val_labels обсуждает квази-цитату, но не содержит пример, который приводит кавычки для каждого из этих трех элементов.Одним из обходных путей является создание названного вектора отдельно и его кавычка:

vector <- value
names(vector) <- label
mtcars.test <- mtcars %>%
  val_labels(
    !!variable := !!vector
  )
attributes(mtcars.test$gear)
#> $labels
#> foo 
#>   1

Это выполнит работу, но мне интересно, есть ли способ сделать это с помощью одной строки без необходимости присваиватьименованный вектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...