Индексирование вложенных списков другим списком

Я сталкиваюсь с некоторыми вложенными списками блюза в R.

У меня есть два вложенных списка, как показано ниже, за исключением того, что каждый имеет размер 200 миллионов. Я заинтересован в индексировании aaa с помощью bIdx, то есть извлекать соответствующие записи из aaa на основе индекса, указанного в bIdx. Например, после операции мы собираем 1,8,10 записей из aaa[[6]], то есть "TopNews", "Opinion" и "Opinion".

Поскольку списки огромны, решения, основанные на итерации по спискам, не являются вариантом, и я хочу, чтобы решение, основанное на неудачах (или вариантах).

Любая помощь очень ценится!

aaa
[[1]]
character(0)

[[2]]
character(0)

[[3]]
character(0)

[[4]]
[1] "TopNews" "TopNews"

[[5]]
[1] "Opinion"

[[6]]
 [1] "TopNews" "TopNews" "TopNews" "Opinion" "TopNews" "TopNews" "Opinion"
 [8] "Opinion" "Opinion" "Opinion" "Opinion" "Opinion"

[[7]]
 [1] "N.Y./Region" "Opinion"     "Opinion"     "Opinion"     "Opinion"    
 [6] "Opinion"     "TopNews"     "TopNews"     "TopNews"     "Opinion"    

[[8]]
[1] "TopNews" "TopNews" "TopNews"

[[9]]
[1] "Opinion" "Opinion" "TopNews" "Opinion" "TopNews"

[[10]]
[1] "TopNews" "Opinion" "TopNews" "TopNews" "Opinion"




bIdx
[[1]]
integer(0)

[[2]]
integer(0)

[[3]]
integer(0)

[[4]]
[1] 1 2

[[5]]
[1] 1

[[6]]
[1]  1  8 10

[[7]]
[1] 3 8

[[8]]
[1] 2

[[9]]
[1] 3

[[10]]
[1] 3

1 ответ

Решение

Это классический случай для mapply, Эта функция принимает функцию в качестве первого аргумента (в этом случае функцию индексации [). Затем он перебирает списки в следующих аргументах и ​​использует выбранные элементы в качестве 1-го, 2-го, ... аргумента для указанной функции.

Пример:

aaa <- list(
  character(0),
  letters[1:4],
  letters[10:20]
)

bldx <- list(
  integer(0),
  c(2,1),
  c(7,3,2)
)

mapply(`[`,aaa,bldx)

На заметку: ваши списки на самом деле не являются вложенными. Вложенный список будет представлять собой список с его элементами, являющимися списками снова (см., Например, вывод lm).

Другие вопросы по тегам