Подтвердить что ты не робот

Создание именованного списка из двух векторов (имена, значения)

Есть ли способ использовать mapply на двух векторах для создания именованного списка? Первый вектор будет иметь тип character и содержать имена, используемые для списка, а второй - значения.

Пока единственное решение, которое у меня есть:

> dummyList = list()
> addToList <- function(name, value) {
+ dummyList[[name]] <- value
+ }
> mapply(addToList, c("foo", "bar"), as.list(c(1, 2))
$foo
`1`

$bar
`2`

Это похоже на довольно надуманное решение, но я не могу понять, как это сделать в противном случае. У меня есть проблемы:

  • Требуется создание dummyList, хотя dummyList никогда не изменяется и является пустым списком после вызова mapply.

  • Если числовой вектор c(1, 2) не преобразуется в список, тогда результат вызова mapply является именованным вектором удвоений.

Чтобы обойти проблему 2, я всегда могу просто вызвать mapply на двух векторах, а затем вызывать as.list в результате, но кажется, что должен быть способ прямого создания списка со значениями, находящимися в вектор.

4b9b3361

Ответ 1

Вы можете использовать setNames()

setNames(as.list(c(1,2)), c("foo", "bar"))

(для списка) или

setNames(c(1,2), c("foo", "bar"))

(для вектора)

Ответ 2

Я разделяю мнение Бена о том, почему вы, возможно, захотите это сделать, и его рекомендации.

Просто ради любопытства в mapply есть своего рода "скрытая" функция, которая позволит это:

x <- letters[1:2]
y <- 1:2
mapply(function(x,y) { y }, x, y, SIMPLIFY = FALSE,USE.NAMES = TRUE)
$a
[1] 1

$b
[1] 2

Отмечая, что в документации для USE.NAMES указано:

USE.NAMES логический; использовать имена, если первый аргумент... имеет имена или если он является символьным вектором, используйте этот символьный вектор в качестве имен.