Динамическое изменение имен списков в R с использованием нестандартной оценки - PullRequest
0 голосов
/ 24 февраля 2020

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

См. Пример ниже:

library(rlang)
dynamic.listname <- "important.name"

# this works (as was also demonstrated in the answer to this related question: https://stackoverflow.com/questions/35034384/dynamically-creating-named-list-in-r ):
list.to.display <- list(1,2,3)
names(list.to.display) <- c("first.fixed.name", dynamic.list.name, "second.fixed.name")

# But I would like something like this to work 
list.to.display <- list(
"first.fixed.name"   = 1,
!!dynamic.listname  := 2,
"second.fixed.name"  = 3
)
# it gives the following error: 
# Error: `:=` can only be used within a quasiquoted argument

Я основал приведенный выше код на примере Tidyverse, последний абзац "Установка имен переменных" на этом веб-сайте: https://dplyr.tidyverse.org/articles/programming.html

Таким образом, 'dynamici c .listname' должен сначала оцениваться как строка, которая хранилась внутри этой переменной. Затем эта строка должна быть реализована как одно из имен в списке. Кто-нибудь знает, как реализовать нестандартную оценку в этой ситуации? База R тоже хорошо для меня. Причина, по которой я хотел бы использовать другие опции, которые в настоящее время еще не работают, заключается в том, что список, который я хочу использовать, встроен в специальную c функцию пакета и, следовательно, немного сложен для манипулирования извне. Кроме того, я пытаюсь узнать больше о нестандартной оценке.

1 Ответ

0 голосов
/ 24 февраля 2020

В базе R вы можете использовать deparse(substitute(x)):

make_list <- function(named_var, value)
{
  result <- list(deparse(substitute(value)))
  names(result) <- deparse(substitute(named_var))
  result
}

make_list(hello, world)
#> $hello
#> [1] "world"

Создано в 2020-02-24 пакетом Представить (v0.3.0)

...