Я пытаюсь использовать 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
Это выполнит работу, но мне интересно, есть ли способ сделать это с помощью одной строки без необходимости присваиватьименованный вектор.