Как создать вектор списков в R?

У меня есть список (tmpList), который похож на это:

$op
[1] "empty"

$termset
$termset$field
[1] "entry"

$termset[[2]]
$termset[[2]]$explode
[1] "Y"

Это - список со списком внутри. Если я добавляю этот список к вектору

theOneVector = c(theOneVector, tmpList)

Теперь итоговый вектор имеет длину 2, потому что первая запись ("op") списка разделяется от tmpList. Действительно ли возможно добавить полный tmpList в этот вектор?
Я уже попробовал его

theOneVector = c(theOneVector, list(tmpList))

который дает вектор с длиной 1, но это является очень громоздким для доступа к элементам списка с этим дополнительным списком вокруг списка. (Слишком много списка в одном предложении я думаю.)

Любая справка ценилась бы,
Martin

12
задан jogo 2 February 2016 в 13:24
поделиться

2 ответа

Вы можете вставить вектор (ограниченная структура, где все компоненты должны быть одного типа) в список (неограниченный).

Но вы не можете сделать наоборот. Используйте списки списков списков ... а затем используйте lapply et al для извлечения.

14
ответ дан 2 December 2019 в 20:40
поделиться

выражение 'c (theOneVector, list (tmpList))' на самом деле не возвращало вектор длины 1, оно возвращало список (по принуждению), потому что элементы в вектор должен иметь один и тот же режим (тип данных).

Вот что вы можете сделать, чтобы создать контейнер в R, который будет содержать элементы разного режима и к элементам которого легко получить доступ:

# create the container (an R 'list')
vx = vector(mode="list")

# create some items having different modes to put in it
item1 = 1:5
item2 = "another item"
item3 = 34
item4 = list(a = c(1:5), b = c(10:15))

# now fill the container 
vx$item1 = item1
vx$item2 = item2
vx$item3 = item3
vx$item4 = item4

# access the items in the container by name:
vx$item1
# returns: [1] 4 5 6
vx$item2
# returns: [1] "another item"
1
ответ дан 2 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: