Как инициализировать столбец data.table с пустыми списками и петлями над ним?

Посмотрите на JVM Profiler , выпущенный UBER.

JVM Profiler - это инструмент, разработанный UBER для анализа приложений JVM в распределенной среде. Он может подключать Java-агент к исполнителям приложения Spark / Hadoop распределенным способом и собирать различные показатели во время выполнения. Это позволяет отслеживать произвольные java-методы / аргументы без изменения исходного кода (аналогично Dtrace).

Вот сообщение в блоге .

1
задан Manuel Bickel 13 July 2018 в 21:01
поделиться

1 ответ

Кажется, у вас отсутствует куча вложенных вызовов list:)

Прежде всего обратите внимание, что

> identical(rep(list(), 100), list())
[1] TRUE

Вам нужно сделать

> rep(list(list()), length(ids))
[[1]]
list()

[[2]]
list()

.

Теперь для назначения:

> DT = data.table(id = ids, x = rep(list(list()), length(ids)))
> DT
   id      x
1:  1 <list>
2:  2 <list>
> DT[1, x:=list(list(c(2, 3)))]  # notice the additional `list()`
> DT
   id      x
1:  1    2,3
2:  2 <list>
2
ответ дан d125q 17 August 2018 в 12:08
поделиться
  • 1
    Вы можете также инициализировать, как DT = data.table(id = ids, x = vector(length(ids), mode="list")), для почти того же результата. Там также помещают rep внутри [], как list()[rep(1L, length(ids))]. – Frank 13 July 2018 в 23:00
  • 2
    Приятно, я знал, что мне не хватает некоторых основных аспектов. Благодарим вас за объяснения и варианты решений. – Manuel Bickel 14 July 2018 в 07:06
Другие вопросы по тегам:

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