В R, как указать аргумент по имени, когда это имя является значением вектора символов?

Допустим, мне нужно сделать это:

foo <- list(`a+b` = 5)

но у меня есть 'a+b' (строка), сохраненная в переменной, скажем, name:

name <- 'a+b'

Как создать этот список с элементом, имя которого является значением в переменной name?

Примечание. Мне известны другие способы присвоения имен элементам списков. Приведенный здесь список является лишь примером. Что я хочу понять, так это то, как я справляюсь с нестандартной оценкой, чтобы я мог указать функции именованный аргумент без необходимости вводить его непосредственно в строке.

Я прочитал главу 13 Advanced R Хэдли о нестандартной оценке, но я все еще не понимаю, как это сделать.

Приветствуется любое решение с базой R или Tidy Evaluation.


person plant    schedule 15.02.2019    source источник


Ответы (1)


Мы можем использовать setNames

bar <- setNames(list(5), name)
identical(foo, bar)
#[1] TRUE

Или сначала создайте объект, а затем используйте names

bar2 <- list(5)
names(bar2) <- name

или с names<-

bar3 <- `names<-`(list(5), name)

Кроме того, вариант tidyverse будет состоять в том, чтобы снять кавычки (!!) и назначить (:=)

library(tidyverse)
lst(!! name := 5)
#$`a+b`
#[1] 5
person akrun    schedule 15.02.2019
comment
Спасибо за ваш быстрый ответ. Первые три метода, приводящие к bar, bar2 и bar3, являются обходными путями... Нет ли способа в базе R по-прежнему использовать list()? Что касается решения tidyverse, является ли lst экспортированной функцией из tidyverse? - person plant; 15.02.2019
comment
@rmagno lst принадлежит tibble, одному из пакетов в tidyverse. setNames в base R самый простой вариант в base R. - person akrun; 15.02.2019
comment
purrr::lst: Error: 'lst' is not an exported object from 'namespace:purrr'. Моя версия пакета для мурлыканья — 0.3.0. - person plant; 15.02.2019
comment
@рманьо. Я отредактировал предыдущий комментарий. Это от tibble - person akrun; 15.02.2019
comment
Да, последний вариант хорош, я просто пытался понять, как это сделать с нестандартной оценкой в ​​базе R... - person plant; 15.02.2019
comment
У этого вопроса было 2 цели: практическая цель сделать это: ваше решение с tidyverse просто отлично. Теперь я также хотел понять, можно ли ссылаться на именованный аргумент по значению переменной. Но ваш ответ просто прекрасен. - person plant; 15.02.2019