Список списков в R с использованием индекса - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу добавить список в качестве элемента другого списка в R. Это представляется возможным, но я не знаю синтаксис. Я попробовал несколько разных вещей и придумали следующие четыре примера, чтобы проиллюстрировать проблему:

Моя цель - приблизить что-то к примеру 3, где я могу написать утверждение, подобное: a$b[5]$c = 7 .

Пример # 1

> q = list()
> q[1] = list(1,2)
Warning message:
In q[1] = list(1, 2) :
  number of items to replace is not a multiple of replacement length

Пример № 2:

> a = list()
> a$b = list()
> a$b[1] = list()
> a$b[2] = list(1)
> a$b[3] = list(1,2)
Warning message:
In a$b[3] = list(1, 2) :
  number of items to replace is not a multiple of replacement length

Пример № 3:

> a$b[5]$c = 7
Warning message:
In a$b[5]$c = 7 :
  number of items to replace is not a multiple of replacement length

Пример № 4:

Часть № 1

> w = list("1"=list(1,1), "2"=list(2,2))
> w
$`1`
$`1`[[1]]
[1] 1

$`1`[[2]]
[1] 1


$`2`
$`2`[[1]]
[1] 2

$`2`[[2]]
[1] 2

Часть № 2

> w[1] = 5
> w
$`1`
[1] 5

$`2`
$`2`[[1]]
[1] 2

$`2`[[2]]
[1] 2

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Как сказал @ Рохит , использование двойных скобок работает. Это решает вопрос, разрешая следующие операции:

> a = list()
> a$b = list()
> a$b[[10]] = list(1,2)
> a$b[[5]] = list(1,2,3)
> a$b[[4]] = 0
> a$b[[3]] = list()
> a$b[[3]]$c = 0
> a$b[[20]] = 5
> a$b[[30]] = list()
> a$b[[40]] = list(1,2)
> a$b[[50]] = list()
> a$b[[50]]$c = list()
> a$b[[50]]$b = 5
> a$b[[50]]$k = list()
> a$b[[50]]$k[1] = list()
0 голосов
/ 26 февраля 2020

Это часто делается за кулисами в пакете решетки, и используется функция modifyList. Вот примеры страниц справки. Однако я не думаю, что эта функция выполняет присваивание пронумерованных элементов в подсписках. Он определен только для именованных списков.

 ?modifyList
 foo <- list(a = 1, b = list(c = "a", d = FALSE))
 bar <- modifyList(foo, list(e = 2, b = list(d = TRUE)))
 str(foo)
#------
List of 2
 $ a: num 1
 $ b:List of 2
  ..$ c: chr "a"
  ..$ d: logi FALSE
#-------
 str(bar)
#----
List of 3
 $ a: num 1
 $ b:List of 2
  ..$ c: chr "a"
  ..$ d: logi TRUE
 $ e: num 2
#--------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...