вернуть данные.таблицу из функции in .J в data.table, как?

#r #data.table

#r #data.table

Вопрос:

 dt = data.table( v = rnorm(40) , g = rep(c("a","b"),20) )
> head(dt)
  
             v g
1:  0.5331207 a
2: -1.1228596 b
3: -0.5366661 a
4: -0.3221877 b
5:  0.1945076 a
6: -0.6483930 b
  

Я хочу выполнить оценку плотности ядра для каждой группы и сохранить результат в новой data.table . Таким образом, функция, выполняемая для каждой группы data.table , сама вернет matrix или data.table

Неудачные попытки:

 dt[, .( { tmp = density(x=v) ; list(x=tmp$x,y=tmp$x) } ) , by = .(g) ]

dt[, .( { tmp = density(x=v) ; data.table(x=tmp$x,y=tmp$x) } ) , by = .(g) ]
  

Желаемый результат:

 > x y g
> -0.5 0.003 a
> -0.45 0.0413 a
...
> 0.8 0.0013 a
...
> -0.5 0.0026 b
> -0.45 0.0034 b
...
  

Комментарии:

1. Если вы удалите .() из первой строки кода, вы получите желаемый результат. В data.table . это просто псевдоним для list , поэтому в этом коде вы действительно делаете list(list(tmp$x, tmp$y)) , т. Е. создаете один столбец, содержащий список, в то время как желаемый результат — это результат list(tmp$x, tmp$y) , т. е. создаете два столбца, каждый из которых содержит цифры.

2. Более короткий способ: dt[, density(x=v)[c("x","y")], by=g]

3. используйте set.seed при приведении примера с rnorm